saay, hi
WAS(wildfly) DB(postgres) connection 유효성 관련 가이드 본문
*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여야 합니다.
[ 유효성 검사 메카니즘 ]
연결의 유효성을 검사하는 데 사용할 SQL 문을 제공
|
사용 중인 특정 데이터베이스에 대한 연결을 확인하는 데 사용되는 연결 검사기 클래스를 지정 JBoss EAP는 다음과 같은 연결 검사기를 제공
|
( ※ 두 메카니즘에 대한 적용 여부는 해당 운영 서비스에 맞춰 진행을 권장합니다 )
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을 정리해주는 옵션으로 사용할 수 있습니다.