사용자 도구

사이트 도구


java:database:dbcp

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:database:dbcp [2015/08/13 17:10]
kwon37xi
java:database:dbcp [2018/12/18 16:19] (현재)
kwon37xi [Eviction 정책]
줄 1: 줄 1:
 ====== DBCP - Java Connection Pool ====== ====== DBCP - Java Connection Pool ======
   * http://commons.apache.org/proper/commons-dbcp/   * http://commons.apache.org/proper/commons-dbcp/
-  * DBCP2 를 사용할 것.+  * 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 메시지 발생    * ''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]] 참조.     * [[https://issues.apache.org/jira/browse/DBCP-424|[DBCP-424] validateLifetime causes needless warnings about swallowed exceptions to be logged]] 참조.
줄 9: 줄 14:
     * 결국은 안찍어도 되는 로그인데 불필요하게 exception으로 찍고 있으므로 무시해도 되며 차후 버전에서는 그냥 로그도 안찍게 변경함.     * 결국은 안찍어도 되는 로그인데 불필요하게 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 이해하기]]
java/database/dbcp.1439453417.txt.gz · 마지막으로 수정됨: 2015/08/13 17:10 저자 kwon37xi