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