====== DBCP - Java Connection Pool ====== * http://commons.apache.org/proper/commons-dbcp/ * DBCP2 를 사용할 것. 아래 내용은 DBCP2 에 관한 것들이다. ===== Eviction 정책 ===== * ''numTestsPerEvictionRun'' : ''-1''을 주면 매번 전체 idle 커넥션에 대한 eviction 테스트를 진행하며 이 경우에는 성능저하가 있을 수 있음. **tomcat jdbc connection pool 에서는 이 값을 무시하고 항상 전체 커넥션을 validation 한다.** * ''timeBetweenEvictionRunsMillis'' : ''numTestsPerEvictionRun''이 작은 상태에서 이 값도 작으면 오랜시간 idle 상태로 유지되면서 비정상 커넥션으로 떨어질 가능성이 높아짐. * 결국, ''numTestsPerEvictionRun''는 작게(3 정도?), ''timeBetweenEvictionRunsMillis'' 도 작게(5000ms 정도?)로 주는 것이 좋다. ===== maxConnLifetimeMillis 오류로그 ===== * ''java.lang.Exception: The lifetime of the connection [300,008] milliseconds exceeds the maximum permitted value of [300,000] milliseconds'' 와 같은 WARN 메시지 발생 * [[https://issues.apache.org/jira/browse/DBCP-424|[DBCP-424] validateLifetime causes needless warnings about swallowed exceptions to be logged]] 참조. * ''maxConnLifetimeMillis'' 보다 오래 살아남은 커넥션에 대한로그임. * 결국은 안찍어도 되는 로그인데 불필요하게 exception으로 찍고 있으므로 무시해도 되며 차후 버전에서는 그냥 로그도 안찍게 변경함. ===== validationQuery ===== * ''testOnBorrow'' 혹은 ''testWhileIdle'' 등에 사용되는 쿼리 유효성 검사 쿼리. * DBCP2와 JDBC 4를 지원하는 Driver를 조합해서 사용할 경우 이 값을 비워두면 [[http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#isValid%28int%29|Connection.isValid(int)]]를 호출한다. * **JDBC 4 드라이버는 이 메소드를 성능 저하없이 커넥션의 유효성을 검사하는 방식으로 구현한다.** * 따라서 **''validationQuery'' 값은 비워두는 것이 좋다.** * [[database:mysql:jdbc|MySQL JDBC]]의 경우에는 ''/* ping */''으로 시작하는 쿼리를 지정해도 동일한 효과가 난다. * ''validationQueryTimeout'' 값도 함께 지정해주도록 한다. 초(sec) 단위. ===== connectionInitSqls ===== * 접속 맺은 후 실행할 명령 List ===== removeAbandoned* ===== * 과거에 connection을 직접 맺고 끊던 시절에 close를 올바로 안한 커넥션을 강제 반환 시키는 옵션으로 보임. * 현대 애플리케이션은 프레임워크가 커넥션을 관리하기 때문에 close가 안될 가능성이 적음. * 설정할 필요가 기본으로는 없어 보임. * 만약 설정한다면 최대 시간을 애플리케이션이 실행할 쿼리의 최대 시간보다 약간 큰 값으로 해야한다. ===== 참고 ===== * [[http://www.slideshare.net/psteitz/apachecon2014-pooldbcp|Apache Commons Pool and DBCP - Version 2 Update]] : 필독. 매우 좋은 DBCP2 소개글. * [[https://arviarya.wordpress.com/2013/02/15/apache-dbcp-connection-pool-revisited/|Apache DBCP connection Pool Revisited]] : DBCP 1 기준. * [[http://d2.naver.com/helloworld/5102792|Commons DBCP 이해하기]]