2013년 9월 23일 월요일

Mysql Memory Temporary Table 생성을 줄이기 위한 JDBC Option

JDBC Driver를 이용해서 MySQL 서버에 접속할 때,
JDBC URL에 아래 옵션을 추가 설정함이 조금은 도움이 될듯 합니다.
==> cacheServerConfiguration=true&elideSetAutoCommits=true
* cacheServerConfiguration
이 값이 기본값은 false이며, JDBC Connection이 만들어질때마다 SHOW COLLATION이나 SHOW VARIABLES 명령이 실행되는데, 이는 MySQL 서버에서 메모리 임시 테이블 조작을 유발하게 됩니다. 그래서 이 값을 강제로 true로 설정하여, 콜레이션이나 설정 변수 값을 JDBC URL 단위로 캐시하도록 합니다. 현재 많은 Connection 생성과 메모리 임시 테이블 조작 작업이 발생하고 있습니다. 이 설정 변경으로 (급격한 성능 향상은 없겠지만) 메모리 임시 테이블의 조작 작업을 반이하로 줄일 수 있을 것으로 보입니다.
* elideSetAutoCommits
이 값 또한 기본값이 false이며, JDBC Client에서 setAutoCommit()이 호출될 때마다 MySQL 서버로 SET autocommit=?명령을 전송하게 됩니다. 그래서 현재 이 명령도 불필요하게 자주 실행되는 편입니다. 이 값을 true로 변경하면 setAutoCommit()으로 설정되는 값과 MySQL 서버의 autocomit값이 다를 때에만 SET autocommit=?명령을 서버로 전송하게 됩니다.
참고로, JDBC 버전은 5.1.16이상으로 진행해 주셔야 중대한 Cache 관련 버그(DB Schema등의 변경이 있을 때, 새롭게 DB정보를 Caching하지 않고 구 Caching 정보를 이용하여 Connection하여 접속 에러 발생)
가 Patch된 것으로 이용하실 수 있습니다.

댓글 없음:

댓글 쓰기