2015-03-03

2015-03-03 22:00

HikariCP

HikariCPはBoneCPより速い速度を誇るDB Connection Poolです。(HikariCP公式サイト参照)
BoneCPの場合は、Hibernate 4.xバージョンからは支援が曖昧になった気がしますが、 HikariCPはHibernateとの統合jarが出るなど、HikariCPを押している気がします。


HikariCP設定

・Maven設定

Java 8 maven artifact:


 com.zaxxer
 HikariCP
 2.2.5
 compile

Java 6 and Java 7 maven artifact:


 com.zaxxer
 HikariCP-java6
 2.2.5
 compile



・Spring + HikariCP
@Configurationを利用したJava Config設定
@Bean(destroyMethod = "shutdown")
public DataSource dataSource() {
 
 HikariConfig config = new HikariConfig();
 
 config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
 config.addDataSourceProperty("serverName", "localhost");
 config.addDataSourceProperty("port", "3306");
 config.addDataSourceProperty("databaseName", "test");

 config.addDataSourceProperty("user", "root");
 config.addDataSourceProperty("password", "test");
  
 config.addDataSourceProperty("zeroDateTimeBehavior", "convertToNull");
 config.addDataSourceProperty("useUnicode", "true");
 config.addDataSourceProperty("characterEncoding", "utf8");
 config.addDataSourceProperty("autoReconnect", "true");

 
 config.addDataSourceProperty("cachePrepStmts", "true");
 config.addDataSourceProperty("prepStmtCacheSize", "250");
 config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
 config.addDataSourceProperty("useServerPrepStmts", "true");
 
 config.setMinimumIdle(20);
 config.setMaximumPoolSize(20);
 
 config.setJdbc4ConnectionTest(true);
 config.setConnectionInitSql("SELECT 1");
 
 HikariDataSource dataSource = new HikariDataSource(config);
 
 return dataSource;
}
・hibernate.cfg.xmlファイル設定
com.zaxxer.hikari.hibernate.HikariConnectionProvider
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
jdbc:mysql://localhost/test
root
test
true
250
2048
true

以下はHikariCPのpropertyの説明になります。

autoCommit (default : true)

connectionが終了されたり、poolが返却される時、connectionに属しているtransactionをcommitするかどうかを決めます。

readOnly (default : false)

database connectionをreadOnly modeでopenします。
この設定はdatabaseが支援してくれないとreadOnlyではない状態でopenされるため、支援databaseリストを確認する必要があります。

transactionIsolation (default : none)

java.sql.Connectionに指定されたTransaction Isolationを指定します。
Transaction Isoluationは以下になります。

・Connection.TRANSACTION_NONE : transactionを支援しません。
・Connection.TRANSACTION_READ_UNCOMMITTED : 他のtransactionからデータを読み込んで来る時、更新された(まだcommitされてなくても)値(dirty value)を読み込みます。
・Connection.TRANSACTION_READ_COMMITTED : 他のtransactionからデータを読み込んで来る時、変更されてない(Commitする前)値を読み込みます。
・Connection.TRANSACTION_REPEATABLE_READ : 同じtransactionの中で、同じ値を読み込む時に、変更される前(他のtransactionで、commitされたとしても)の値を読み込みます。TRANSACTION_READ_UNCOMMITTEDと一緒に使用できません。
・Connection.TRANSACTION_SERIALIZABLE : Dirty Read、Non-repeatable Read、Phantom Readが制御されます。
Default値はそれぞれのDriver vendorのJDBCDriverで支援しているTransaction Isoluationに従います。(noneで設定した時)
transactionに関してはこちらを参照してください。

category (default : none)

connectionで接続されるcategoryを決めます。
値が設定されてない場合、JDBC Driverで設定された基本categoryが指定されます。

connectionTimeout(default: 30000 - 30 seconds)

connectionが接続される時のtimeout out時間を設定します。
この時間以内にconnectionが接続されなかった場合、SQLExceptionが発生します。

idleTimeout(default : 600000 - 10 minutes)

connection Poolによって確保されたconnectionのmaximum idle timeを決めます。
connection Poolによって確保されたconnectionが使われずに、Poolでこの時間の間、待機している場合、connectionをDBに返却します。
値を0に設定した場合、確保されたconnectionを絶対返却しません。

maxLifetime(default : 1800000 - 30 minutes)

connection Poolによって確保されたconnectionの最大Life Timeを決めます。
connectionを取得した後、この時間以上になった場合、最近使われたconnectionでも、connectionをcloseします。
使用中のconnectionはcloseしません。(connectionの使用が終わったらすぐcloseされます。) HikariCPではこの値を30~60 minutesに設定することをお勧めします。
この値を0にした場合、lifetimeは無制限になります。

leakDetectionThreshold (default : 0)

connectionPoolから返却されたconnectionが正しく返却されたかどうかをチェックするthread数を指定します。
この値を0に指定した場合、leak detectionはdisableされます。

jdbc4ConnectionTest (default : true)

connectionされた後、Connection.isValid() methodを呼び出しconnectionが正常かどうかを確認します。
このpropertyは次のconnectionTestQueryに密接な影響をうけます。

connectionTestQuery (default : none)

Connection.isValid() methodが使えない‘legacy’ databaseの為にTEST用の簡単なqueryの指定ができます。
(ex: VALUES 1)
jdbc4ConnectionTestが使える場合は、jdbc4ConnectionTestを使った方がいいです。

connectionInitSql (default : none)

新しいconnectionが生成され、Poolに追加される前に実行されるSQL queryを指定します。

dataSourceClassName (default : none)

JDBC driverで支援するdataSourceClassNameを指定します。この値はdriverClassNameが指定された場合は、指定する必要がありません。

dataSource (default : none)

使用者が作ったdataSourceをPoolによってwrappedしたい場合は、この値を指定します。
HikariCPはこの文字列を利用してreflectionを通じてdataSourceを生成します。
この値が設定された場合、dataSourceClassName, driverClassNameに設定された値は無視されます。

driverClassName

HikariCPで使用するDriverClassを指定します。
この値が指定された場合、jdbcUrlを必ず指定しなければなりません。

jdbcUrl

jdbcUrlを指定します。driverClassNameが指定された場合、jdbcUrlを指定する必要があります。

minimumIdle (default : maximumPoolSize)

connection Poolで維持する最小限のconnection数を指定します。
HikariCPでは最高のperformanceの為に、maximumPoolSizeとminimumIdleの値は同じにしてconnection Poolの大きさをfixすることをお勧めしています。

maximumPoolSize

connection Poolで使用する最大のconnection数を指定します。
この部分は運営環境と開発環境での多くのテストが必要です。

username

Connectionを取得するための認証ユーザ名を指定します。

password

usernameのパスワードを指定します。

poolName (default : auto-generated)

loggingとJMX managementで出力されるpoolの名前を指定します。

registerMbeans (default : false)

JMX management Beansに登録されるかどうかを決めます。



参考URL

http://stackoverflow.com/questions/20955875/is-tomcat-7-jdbc-connection-pool-good-enough-for-production-and-how-is-it-com
https://github.com/brettwooldridge/HikariCP

0 コメント:

コメントを投稿