DB Connection Pool을 사용하기 위해서 Apache Commons의 dbcp를 많이 사용하고 있지만 매번 설정값에 대한 정확한 정의와 설정방법을 까먹는 경향이 있어 일반적인 설정값 가이드를 아주 간단히 정리하고자 한다.
maxActive (최대 active connection 개수??)
+ 그냥 최대 Connection 개수로 생각하면된다.
+ 기본값은 8이며, 적당히? 설정하면 된다.
minIdle
+ 사용되지 않고 풀에 저장될 수 있는 최소 커넥션 개수
+ 기본값은 0이며, 기본값을 사용하게 되면 connection pool이 비어버릴 수 있기 때문에 기본값 대신 적당한 설정이 필요하다.
maxIdle
+ 사용되지 않고 풀에 저장될 수 있는 최대 커넥션 개수
+ 기본값은 8이며, 일반적으로 maxActive 개수와 동일하게 설정하는게 맞는 것 같다
maxWait
+ connection 사용이 많아져서 connection pool이 비었을 때 대기시간 (단위 1/1000초)
+ 기본값은 -1(무한대)이며, 서비스 특성에 맞게 설정하면된다. 일반적으로 기본값을 사용해도 큰 문제는 안될 것 같다.
testOnBorrow
+ connection pool에서 connection을 가져올 때 해당 connection이 유효성 검사 여부
+ 기본값은 false이며, 일반적으로 기본값을 사용한다. true설정하게 되면 매번 validationQuery를 수행하기 때문에 약간의 성능저하를 감수해야 한다.
testOnRetrun
+ testOnBorrow와 비슷한데… 다만 유효성 검사 시점이 connection을 pool에 반환할때 이다.
timeBetweenEvictionRunsMillis
+ 놀고 있는 connection을 pool에서 제거하는 시간기준 (설정된 시간동안 놀고 있는 connection을 minIdle&maxIdel 설정값을 고려하여 제거한다.)
+ 기본값은 -1이며, 단위는 1/1000초이다. 개인적으로 10분정도의 설정이 적당한 것 같다.
testWhileIdle
+ 놀고 있는 connection의 제거 여부를 검사할 때 해당 connection의 유효성 테스트 여부
+ 기본값은 false이며, 일반적으로 true로 설정하는 것이 좋은 것 같다.
validationQuery
+ connection 유효성 검사시에 사용할 쿼리문
+ DB 리소스를 최대한 적게 사용하는 쿼리를 사용하는게 좋다.
예제)
* Oracle : select * from dual
* MySql : select 1