saay, hi

WAS(wildfly) DB(postgres) connection 유효성 관련 가이드 본문

미들웨어/현장 가이드

WAS(wildfly) DB(postgres) connection 유효성 관련 가이드

saay-hi 2024. 10. 21. 10:37

*db 절체와 관련하여 JDBC 드라이버 내 적용 가능한 옵션 여부는 DBNM 벤더측에 문의

 

환경 :

was wildfly14
db postgres

 

 

제 환경에서 테스트 가능한 <wildfly14-postgres> 구조에 한하면,

<datasource jta="false" jndi-name="java:/jdbc/TestJNDI" pool-name="PostgreSQL" use-ccm="false" tracking="false" statistics-enabled="true">
        <connection-url>jdbc:postgresql://10.217.69.58:5432/postgres?prepareThreshold=0</connection-url>
            <driver>pg</driver>
             ...
            <validation>
                <check-valid-connection-sql>select 1</check-valid-connection-sql>
                <validate-on-match>false</validate-on-match>
                <background-validation>true</background-validation>
                <background-validation-millis>30000</background-validation-millis>
           </validation>
  </datasource>

 

*다만, db 절체는 옵션에 따라 동작하는 방식이 상이합니다.

db 절체 유도 관련 옵션 비고
check-valid-connection-sql Select1 이라는 문구를 던지며 유효성 체크 java 애플리케이션 서버에서 관리되는 옵션들로 EDB에서도 동일하게 적용
다만, check-valid-connection-sql valid-connection-checker-class-name
db 커넥션 검증 매커니즘에 대한 종류로 두 옵션에 대한 적용 여부는 해당 운영 서비스에 맞춰서 진행 권장
( valid-connection-check-class-name은 jboss AS 에서도 valid-connection-check-class-name으로 설정돼있음)
validate-on-match

(유효성 검사 타이밍 방법1)
연결된 connection에 대해서 사용하기 전 connection 상태를 매번 체크하는 옵션
query
가 실행될 때마다 유효성을 체크하기 때문에 DB서버의 부하가 발생할 수 있음
background-validation
(유효성 검사 타이밍 방법2)
일정 주기(background-validation-millis설정한 단위) connection 상태를 체크함

background-validation-millis Background-validation 의 검증 빈도
 
timeout 옵션 비고
idle-timeout-minutes connection pool 중 설정된 시간 동안 사용하지 않으면 폐기 되는 옵션임
validation 설정 유뮤와 관계없이 설정 시간동안 사용하지 않은 connection 일 경우 정리 될 수 있음



query-timeout 쿼리가 특정 시간 내에 실행되지 않으면 실행이 취소되는 시간으로 쿼리가 오래 걸리거나 무한루프에 빠지는 경우를 방지하기 위한 옵션

<validate-on-match>와 <background-validation> 은 상호배타적인 옵션이라 하나가 true 면 다른 하나는 false여야 합니다.

 

[ 유효성 검사 메카니즘 ]

check-valid-connection-sqlvalid-connection-checker-class-namecheck-valid-connection-sqlvalid-connection-checker-class-name
연결의 유효성을 검사하는 데 사용할 SQL 문을 제공
  • Oracle 커넥션의 유효성을 검사 예시
 
  • MySQL 또는 PostgreSQL 연결의 유효성을 검사 예시
 
사용 중인 특정 데이터베이스에 대한 연결을 확인하는 데 사용되는 연결 검사기 클래스를 지정
JBoss EAP는 다음과 같은 연결 검사기를 제공
  • org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLReplicationValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.novendor.JDBC4ValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.novendor.NullValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
  • org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker

( ※ 두 메카니즘에 대한 적용 여부는 해당 운영 서비스에 맞춰 진행을 권장합니다 )

DBNM에 따라, checker class가 존재할 수 있으며 checker class가 존재할 경우 valid-connection-checker-class-name 메카니즘을 사용하기를 권장합니다.

<valid-connection-checker-class-name>의 경우 데이터베이스가 연결되는지까지만 확인하지만, <check-valid-connection-sql>의 경우 db안에서  sql을 전송하므로 db부하가 발생할 수 있습니다.

 

 

위와 같은 옵션 설정 시,

wildfly postgrs 의 connection에 대해서 유효성을 확인할 수 있으며, 

validation 경우 HA구성에 따라, 유효성을 체크하여 사용하지 못하는 connection 을 신규 connection으로 생성하여 절체된 db로의 연계를 유도하는 옵션으로도 사용할 수 있으며

idle-timeout-minutes 의 경우, 옵션에 따른 설정 값에 따라서 connection pool의 connection을 정리해주는 옵션으로 사용할 수 있습니다.