本記事では、接続プールの構成パラメータについて説明します。これには、ZDALパラメータ、Druidパラメータ、DBCPパラメータ、C3P0パラメータ、およびJDBCパラメータなどが含まれます。
データソース構成パラメータ
| パラメータの意味 | 説明 | ZDALパラメータ | Druidパラメータ | DBCPパラメータ | C3P0パラメータ | |
|---|---|---|---|---|---|---|
| 初期接続数 | 接続プールの初期化時に確立される接続数。 | prefill=trueの場合、minConnまで初期化されます。 | initialSize(0) | initialSize(0) | initialPoolSize(3) | |
| 最小接続数 | 使用可能な最小接続数。これにより、接続プールは常にこの数の接続を保持します。 | minConn(0) | minIdle(0) | minIdle(0) | minPoolSize(3) | |
| 最大接続数 | 使用可能な最大接続数。この数を超えると、接続プールは例外をスローします。 | maxConn(10) | maxActive(8) | maxActive(8) | maxActive(8) | |
| 接続アイドルタイムアウト時間 | 接続が一定時間アイドル状態の場合、接続プールが自動的に接続を切断するまでの時間です。MySQLのデフォルトは8時間で、プライマリ/スタンバイ切り替え時に接続はダーティ接続になります。この仕組みがない場合、リクエストが失敗する可能性があります。クラウド上のOceanBase SLBのタイムアウト時間は15分ですが、タイムアウト時間を12分に設定できます。 | idleTimeoutMinutes(30min) | minEvictableIdleTimeMillis(30min) | minEvictableIdleTimeMillis(30min) | timeBetweenEvictionRunsMillis(-1) > 0に設定する必要があります。このパラメータは非同期チェックサイクルを制御します。 | maxIdleTime(0はタイムアウトなし) |
| 接続プールからの接続取得タイムアウト時間 | 値を大きく設定しすぎると、接続プールが満杯になった場合、アプリケーションの応答が遅くなる可能性があります。 | blockingTimeoutMillis(500ms) | maxWait(-1はタイムアウトなし) | maxWaitMillis(-1はタイムアウトなし) | checkoutTimeout(0はタイムアウトなし) | |
| 接続取得後の解放タイムアウト時間 | この時間を超えると、接続が接続プールに返却されずに直接破棄されます。接続漏れを防ぐことができますが、トランザクションの使用時間制限に影響を与えます。 | なし | removeAbandonedTimeoutMillis(300s) | removeAbandonedTimeout(300s) | なし |
JDBC構成パラメータ
JDBCの重要なパラメータは、必ず設定する必要があります。これらはすべて接続プールのConnectionPropertiesまたはJdbcUrlに設定できます。具体的なパラメータとその説明は以下の表のとおりです。
| パラメータ | 説明 |
|---|---|
| socketTimeout | ネットワークソケットのタイムアウトをミリ秒単位で定義します。値が0の場合、タイムアウト制限はありません。システム変数max_statement_timeを設定することでもクエリ時間を制限できます。デフォルト値:0(標準構成)。 |
| connectTimeout | 接続タイムアウト値をミリ秒単位で指定します。値が0の場合、タイムアウト制限はありません。デフォルト値:30000。 |
接続プールの設定に関する推奨事項
コンソールでは、通常の運用において最小でも2つの接続を維持することができれば十分です。具体的な数は、業務の同時実行数やトランザクションの時間に応じて調整してください。
接続のアイドルタイムアウト時間を設定します。30分を推奨します。
MySQLのデフォルトでは、8時間以上接続が維持されると自動的に切断されますが、クライアント側ではこの変化を検知できないため、ダーティコネクションが発生する可能性があります。接続プールでは、ハートビートやtestOnBorrowなどの仕組みを利用して接続が有効かどうかを確認し、この時間を超えても接続が使用されない場合は直接切断します。