MySQLのJDBCドライバーであるConnector/Jですが、どのようなプロパティを設定した方がいいのかよく忘れるので。
いい情報はないかな?と思ったら、HikariCPのWikiによくまとまっていました。
MySQL Configuration · brettwooldridge/HikariCP Wiki · GitHub
記載時点(Connector/J 8.0.32時点)で、以下のようなプロパティが記載されています。
※Connector/Jのプロパティとそのまま対比できるように整形しました
prepStmtCacheSize=250 prepStmtCacheSqlLimit=2048 useServerPrepStmts=true useLocalSessionState=true rewriteBatchedStatements=true cacheResultSetMetadata=true cacheServerConfiguration=true elideSetAutoCommits=true maintainTimeStats=false
prepStmtCacheSize- Prepared Statementのキャッシュ数。デフォルトは25
cachePrepStmtsをtrueにする必要あり
prepStmtCacheSqlLimit- キャッシュするPrepared Statementの(SQL文の)長さ
cachePrepStmtsをtrueにする必要あり- デフォルトは256
cachePrepStmts- 有効(
true)にするとクライアントサイドまたはサーバーサイドのPrepared Statementの適合性をチェックする(キャッシュの有効化) - デフォルトは無効(
false)
- 有効(
useServerPrepStmts- 有効(
true)にするとサーバーサイドPrepared Statementを使用する - デフォルトは無効(
false)
- 有効(
rewriteBatchedStatements- 有効(
true)にすると、executeBatchの呼び出しを伴うinsertおよびreplaceをバルクinsertまたはバルクreplaceに書き換える - Connector/Jではバッチ更新とそのままSQL文を実行するのに差がないため、速度を改善しようとするとこのプロパティの有効化が必要
- デフォルトは無効(
false)
- 有効(
useLocalSessionStatecacheResultSetMetadata- 有効(
true)にすると、ResultSetMetaDataをキャッシュする - デフォルトは無効(
false)
- 有効(
cacheServerConfiguration- 有効(
true)にすると、show variablesとshow collationの結果をキャッシュする - デフォルトは無効(
false)
- 有効(
elideSetAutoCommits- 有効(
true)にすると、Connection#setAutoCommit実行時にサーバーとドライバーの状態が異なる時のみset autocommit=nクエリーを発行する - デフォルトは無効(
false)
- 有効(
maintainTimeStats- 無効(
false)にすると、MySQLサーバーへの接続が失敗した時に詳細なエラーメッセージを出力するために維持するアイドル時間等の内部タイマーを無効にする - デフォルトは有効(
true)
- 無効(
あとは、これに加えてcharacterEncodingとconnectionCollation、useCursorFetchとdefaultFetchSizeを指定しておけばいいのかな、
という気がします。
MySQL+Connector/Jを使って、大量データのSELECT⇒INSERTした時の挙動を確認する - CLOVER🍀
参考
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-performance-extensions.html