728x90
반응형
일정 시간 사용하지 않던 커넥션 풀을 다시 사용하려 할 때 지연되는 현상 해결
외부 데이터베이스와 연동을 하는 시스템에서 특정 시점부터 15분이 딜레이 되는 현상을 발견하여 해결하였습니다.
설정 정보나 코드는 변경되지 않았고, 갑자기 해당 현상이 발생했습니다.
발생 원인
- 딜레이 주기를 모니터링해보니 평균 2시간 이상 해당 커넥션 풀을 사용하지 않다가 처음 다시 사용하려고 할 때 15분 지연됨을 확인할 수 있었습니다.
- 딜레이 이후 짧은 주기로 재사용할 때는 지연 현상이 발생하지 않았고, 이를 근거로 시스템의 유휴 상태인 커넥션 풀을 외부 DBMS에서 close() 해주고 있거나, 재시도 시 지연되어 해당 현상이 발생한다고 판단하였습니다.
- 이를 해결하기위해 validationQuery를 주기적으로 호출하여 연결을 유지함으로써 해결할 수 있었습니다.
해결 방법
- validationQuery를 주기적으로 호출하여 연결을 유지할 수 있도록 사용하고 있는 apache dbcp 설정 변경
apache commons dbcp를 사용하고 있습니다.
Parameter | Default | Description |
validationQuery | 호출자에게 연결을 반환하기 전에 이 풀의 연결을 확인하는 데 사용할 SQL 쿼리입니다. Oracle : SELECT 1 FROM DUAL MySql : SELECT 1 |
|
testWhileIdle | false | Evictor가 실행될 때 개체의 유효성을 검사할지 여부를 나타냅니다. 개체의 유효성 검사에 실패하면 풀에서 삭제됩니다. |
timeBetweenEvictionRunsMillis | -1(미사용) | 개체의 유효성을 검사하는 주기(Evictor 가 동작하는 간격) |
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<!-- validationQuery 활성화 -->
<property name="validationQuery" value="SELECT 1 FROM DUAL"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="300000"/>
</bean>
외 다양한 설정 정보들이 많으므로 보다 상세한 사항은 아래 사이트를 참고하시면 좋을 것 같습니다.
- https://commons.apache.org/proper/commons-dbcp/configuration.html
- https://sjh836.tistory.com/148
728x90
반응형
'Oracle' 카테고리의 다른 글
[Oracle] LISTAGG 사용 시 적용 안 되는 케이스(NVARCHAR2) (0) | 2023.10.04 |
---|---|
[Oracle] ORA-01839 : "지정된 월에 대한 날짜가 부적합합니다" 해결 feat. ChatGPT (0) | 2023.04.04 |
[ORACLE] ORA-03113 : Merge 사용 시 에러 발생 (0) | 2022.04.20 |
[Oracle] 테이블 생성 시간/정보 확인하기 (0) | 2022.03.26 |
[Oracle] 시퀀스 채번 증가 이상 - Cache (0) | 2022.01.29 |
댓글