本記事では、接続プールの設定パラメータについて説明します。これには、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 | ネットワークソケットのタイムアウト(SO_TIMEOUT)をミリ秒単位で定義します。値が0の場合、このタイムアウトは無効になります。クエリ時間を制限するには、システム変数max_statement_timeを設定することもできます。 デフォルト値:0(標準設定)。 |
| connectTimeout | 接続タイムアウト値をミリ秒単位で指定します。値が0の場合、タイムアウト制限がないことを意味します。デフォルト値:30000。 |
接続プール設定の推奨事項
管理コンソールでは、日常的にminが2つの接続を維持しておけば十分です。具体的な調整は、業務の同時実行数とトランザクション時間に応じて行ってください。
接続アイドルタイムアウト時間を設定することを推奨します。推奨値は30分です。
MySQLのデフォルトでは、接続が8時間アイドル状態のままであると、クライアント側では検知できず、ダーティコネクションが発生することがあります。接続プールは、ハートビートやtestOnBorrowなどのメカニズムを通じて接続の生存状態を確認し、この時間を超えて接続が使用されない場合は直接切断します。