本記事では、接続プールの設定パラメータについて説明します。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。 |
接続プール設定の推奨事項
マネジメントコンソールでは、日常的にminを2つの接続に保つだけで十分です。具体的な調整は、ビジネスの同時実行数とトランザクション時間に応じて行ってください。
接続アイドルタイムアウト時間を設定することを推奨します。30分が適しています。
MySQLのデフォルトでは、接続は8時間アイドル状態のままであると自動的に切断されますが、クライアント側ではこの動作が検知できないため、ダーティコネクションが発生する可能性があります。接続プールは、ハートビートやtestOnBorrowなどのメカニズムを用いて接続の生存状態を確認し、この時間を超えて接続が使用されない場合には直接切断します。