본문 바로가기

Programing/Java

Mysql Connection pooling


비단 mysql에서만 필요한 것은 아니지만 mysql 사용을 예로 들어 connnection pooling에 대해서 적어 놓는다. 

mysql을 예로 들어 jdbc를 통해서 쿼리가 필요할 때마다 connection을 맺고  query의 결과를 받아오는 것은 비용이 크다고 볼 수 있다. 
예전에 아래 포스팅에서도 썼듯 connection의 비용이 작은 편이 아니다. 

http://the-earth.tistory.com/entry/mysql-insert-%EC%86%8D%EB%8F%84%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC-Speed-of-INSERT-Statements

아래는 insert시에 드는 비용을 비율화 한 것이다. 
  • Connecting: (3)

  • Sending query to server: (2)

  • Parsing query: (2)

  • Inserting row: (1 × size of row)

  • Inserting indexes: (1 × number of indexes)

  • Closing: (1)


  • 따라서 저 connection을 유지하면서 여러 쓰레드들이 필요할 때만 사용하도록 하면 시간 뿐만 아니라 system의 자원도 아낄 수 있게 된다. 
    mysql에 접속한 컴퓨터 하나로 여러사람이 필요할 때마다 앉아서 쓰면 한대를 가지고도 사용 가능하지만 한명마다 mysql 때문에 컴퓨터를 한대씩 줄 필요는 없는 것과 같다. 

    보통 멀티 쓰레드환경에서도 쓰레드가 connection을 실제로 사용하는 시간은 그렇게 많지 않을 수 있다. 
    그럴때 connection pool을 사용하면 된다. 

    도움이 될 것 같으면 광고를 한번 클릭한다. 






    자 클릭 했는가?
    그렇다면 다시 설명에 들어가쟈 

    각 쓰레드는 어떤 객체(connection Pool 객체라 하자)에서 connection을 얻어서 쓰고 반납한다. 
    즉, connection을 관린 해주는 객체가 따로 있는 것이다. thread들은 connectionPool 객체에게 connection을 빌린다. 
    connectionPool 객체는 pool장에 있는 connection들 중에 하나를 thread에게 빌려준다. 
    thread들은 사용을 완료하면 connection을 connectionPool 객체에 반납한다. 

    이런식으로 100개의 thread가 동시에 mysql 접근하는 량이 10개 정도라면 10개의 connection만으로도 충분히 서비스가 가능하다. 
    connectionPool 객체는 pool에 있는 connection의 상태 및 개수를 관리해 준다. 사용자 입장에서 복잡한 connection관리가 필요 없는 것이다. 

    http://dev.mysql.com/tech-resources/articles/connection_pooling_with_connectorj.html
    위에서 말하는 connection pool 사용의 세가지 장점을 보면서 간단히 정리를 해보쟈 

    connection pool을 사용하므로써
    • 첫번째로 connection 생성 시간을 줄일 수가 있다. connection을 재사용 하기 때문에 conneciton을 만드는 비용이 줄어든다. 
    • 두번째로 connectionPool 사용으로도 thread들이 각자 connection을 만드는 것과 다르지 않은 서비스를 할 수 있다. 
    • 세번째로 시스템 자원을 효율적으로 관리할 수 있다. 

    아래 페이지게 가보면 tomcat server에 database connection pool을 사용설정하는 부분이 있다. 
    http://tomcat.apache.org/tomcat-4.1-doc/printer/jndi-datasource-examples-howto.html#MySQL%20DBCP%20Example

    JNDI에 대해서도 이해할 수 있다. 


    'Programing > Java' 카테고리의 다른 글

    java remote debugger, 자바 원격 디버깅  (0) 2011.08.29
    java multi-thread, thread pool 사용  (0) 2011.07.29
    JNDI  (0) 2011.06.23
    java jdbc tutorial  (1) 2011.06.21
    java udp server 예제 (datagram)  (0) 2011.06.20