Common DBCP2
Apache에서 제공하는 Database Connection Pool을 제공하기위한 오픈소스 라이브러리이다
Database를 사용하기위해 커넥션을 생성하는 부담을 줄여준다
Connection Pool을 사용하지 않았을때는 다음과 같이 동작한다
- DB접속을 위해 JDBC 드라이버를 로드한다
- DB Configuration 정보를 기반으로 DriverManager.getConnection()을 통해 Connection을 받는다
- Connection으로부터 쿼리 수행을 위한 PreparedStatement를 받는다
- executeQuery를 통해 쿼리를 수행하고 ResultSet 결과를 받는다
- 받은 데이터를 처리하게 되면 close를 통해 리소스를 반환한다
Connection Pool을 사용할때는 다음과 같이 동작한다
- WAS가 실행되면서 Pool에 DB Connection과 TimeStamp를 한 Pair로 하는 ObjectTimeStampPair를 생성한다
- 요청에 따라 커넥션이 필요할 때 Pool에서 Connection을 LIFO형태로 받아 쓰고 반납한다
Properties
커넥션 개수 관련 속성
- initialSize : DataSource 생성 후 최초로 getConnection() 메스드를 호출 시 커넥션 풀에 넣을 커넥션 수
- MaxTotal : 동시에 사용가능한 수 있는 최대 커넥션 수
- MaxIdle : Connection Pool에 반납할 때 최대로 유지될 수 있는 커넥션 수
- MinIdle : 최소한으로 유지할 커넥션 수
- MaxWaitMillis : Pool이 고갈되었을 때 최대 대기시간 (ms단위, default = -1 = unlimit)
- 적절하지 않은 시간으로 설정시 Tomcat Thread Pool이 죽거나 오류메세지가 자주 출력된다
커넥션 개수와 관련된 속성은 다음과 같은 조건을 만족해야 한다
- 적절하지 않은 시간으로 설정시 Tomcat Thread Pool이 죽거나 오류메세지가 자주 출력된다
- MaxTotal >= initialSize
- MaxIdle >= MinIdle
- MaxActive = MaxIdle
마지막 조건의 경우 맞지 않으면 커넥션이 존재하는데도 불구하고 DB에 가서 커넥션을 생성해와 사용한 뒤 풀에 반납하여 제거하게 되니 불필요한 비용이 생긴다
유효성 검사 관련 속성
- testOnBorrow : 커넥션 풀에서 커넥션을 얻을 때 테스트 실행 (default = true)
- trestOnReturn : 커넥션 풀로 커넥션을 반환할 때 테스트 실행 (default = false)
- trestWhileIdle : Evictor 스레드가 실행될 때 커넥션 풀 안에 있는 유휴 상태의 커넥션을 대상으로 테스트 실행 (deafult = false, MySQL : SELECT 1)
Evictor 스레드 관련 속성
Evictor 스레드는 Commons DBCP 내부에서 별도로 수행되는 커넥션 자원 정리 스레드다
- timeBetweenEvictionRunMillis : Evictor 스레드가 동작하는 간격 (default = -1 = false)
- numTestsPerEvictionRun : Evictor 스레드 동작시 한번에 검사할 커넥션 수
- minEvictableIdleTimeMillis : Evictor 스레드 동시 커넥션 TimeStamp값 확인해 설정 값 이상일 경우 제거 (default = 30min)
Statement Pooling 관련 옵션
Statment를 pooling할 수 있도록 한다
pool을 사용하는 메모리는 statement 객체 크기 * pool 수 * connection
수가 된다
- poolPreparedStatements : Statement pool로도 Commons DBCP를 사용할 수 있게 한다
- maxOpenPreparedStatements : 최대로 열어둘 prepared statements 수 (deafult = unlimit)
JAVA Config
1 |
|