データベース接続のチューニング
接続プールアーキテクチャー
Jira がデータベースにアクセスする (例: 読み込みまたは書き込みを行う) 時には、必ずデータベース コネクションが必要になります。
データベース コネクションとは、Jira とそのデータベース間のすべての通信を処理する、複雑で大規模なオブジェクトです。したがって、データベース コネクションの確立は時間のかかる処理であり、クライアント (Jira アプリケーション) とデータベース サーバーの双方で大量のメモリを消費します。
Jira からのデータベース アクセス要求に対して毎回新しいデータベース コネクションを確立すると高負荷な処理が発生するため、これを回避するために、確立済みのテータベース コネクションのプールが維持されます。Jira からの新たなデータベース アクセス要求のたびに、確立済みのテータベース コネクション プールからコネクションが使用されます。したがって、次のようになります。
- Jira の起動時にはプール内において Jira とデータベース間の最小限のデータベース コネクションが確立されます。
- Jira からデータベースにアクセスする必要がある場合、Jira では次のような処理が行われます。
- プールに対してデータベース接続を要求します
- そのデータベース接続を使用してデータベースの読み出しまたは書き込みを行います
- 処理が終了するとデータベース接続をプールに戻します。
Jira のデータベース アクセス要求の頻度がプールにおける利用可能な接続数を超え始めたときは、負荷を処理するためにコネクションが自動的に追加されます。
逆に、Jira のデータベース アクセス要求の頻度がプールにおける利用可能なデータベース コネクション数を下回り始めると、接続を自動的にクローズしてリソースをシステムに返すようにすることができます。
最近のデータベースは多数の接続を比較的簡単に処理することが可能で、メモリーさえ十分にあれば同時接続可能数は数百にもなります。ただし、クライ アント側では接続は大量のメモリーを消費します。従って、最大接続数をそれよりずっと小さい数に制限して、接続する必要が生じたアプリケーションがほぼ待 つことなく接続を利用できるようにするのが一般的です。
Jira のデータベース接続をチューニング
- Jira インストールをシャットダウンします。
- 次のいずれかを行います。
- Jira 設定ツール を使用して、Jira のデータベース接続を調整します。
- Jira 設定ツールを起動します。
- Windows: コマンド プロンプトを開いて、Jira インストール ディレクトリの
bin
サブディレクトリにあるconfig.bat
を実行します。 - Linux/Unit: コンソールを開いて、Jira インストール ディレクトリの
bin
サブディレクトリにあるconfig.sh
を実行します。
KB 記事「Unable to Start Jira applications Config Tool due to No X11 DISPLAY variable was set error に記載のエラーで失敗する場合があります。この場合、ページに記載されている回避策をご参照ください。
JAVA_HOME
環境変数の設定が必要な場合があります。詳細については、「Java のインストール」を参照してください。 - Windows: コマンド プロンプトを開いて、Jira インストール ディレクトリの
- Jira 設定ツールが起動したら、[詳細] タブをクリックします。
- このタブで指定可能なオプションの詳細については、下の 接続プールの設定 を参照してください。これらのオプションの値を指定するには、先に一番左のチェックボックスにチェックを入れる必要があります。
上図のオプションのいくつかは、単なるチェックボックスです(たとえば、JIRA 設定ツールの中央付近にあるチェックボックス)。これらのチェックボックスにチェックを入れると、それに関連するオプションの値が「true」に設定されます。逆に、チェックをはずすと、それに関連するオプションの値が「false」に設定されます。 - [Save] ボタンをクリックして変更を保存すると、
dbconfig.xml
ファイルの要素として格納されます。
- Jira 設定ツールを起動します。
- または、Jira ホーム ディレクトリのルートにある
dbconfig.xml
ファイルを編集します。- Jira のデータベース コネクションのチューニングを行うために
dbconfig.xml
ファイルに追加できる要素の詳細については、後述の「コネクション プールの設定」をご覧ください。 - 編集済みの
dbconfig.xml
ファイルを保存します。
- Jira のデータベース コネクションのチューニングを行うために
- Jira 設定ツール を使用して、Jira のデータベース接続を調整します。
- Jira インストールを再起動します。
接続プールの設定
Jira 設定ツールの "詳細" タブのオプション | | 説明 | 推奨事項/注意事項 | デフォルト値* |
最大サイズ |
| 同時にオープン可能なデータベース接続の最大数。 | Jira がデータベース コネクション要求を送信したときに待機する必要がないよう、十分に大きい値を設定する必要があります。 このパラメーターの設定方法に関連するヒントは、下の「監視」の項目をご覧ください。 | 20 |
最大アイドル状態 |
| プール内でアイドル状態のまま保持可能なデータベース接続の最大数。 | この値を負に設定すると、プール内でアイドル状態のまま存在可能なデータベース接続の最大数は無制限になります。 下で説明する Minimum Idle/Size の値が上で説明した Maximum Size の値と同一の場合 (デフォルトではこれが成立します) は、この設定は無意味になります。 | Maximum Size の値 |
最小アイドル状態/サイズ |
( | 同時にオープンしているアイドル状態のデータベース接続の最小数。 | この値を上で説明した Maximum Size と同一にすると (デフォルトではこれが成立します)、プールにおける接続数は一定でアイドル接続がクローズされることはありません。 非常に大きな Jira インストールでは、これを Maximum Size よりも小さな値にすることでリソースが節約できる場合があります。 | Maximum Size の値 |
初期サイズ |
| プール内でオープンされるデータベース接続の初期値。 | Jira の起動時に多数のデータベース コネクションが迅速に作成されるため、この値は通常は (0 以外に) 設定しません。 | 0 |
最大待機時間 |
| プールに空きコネクションがない場合に、データベース コネクションが利用可能となるまでに Jira が待機する最大時間 (単位はミリ秒)。これを過ぎるとエラーが通知されます。 | '-1' を指定すると Tomcat の待ち時間は無期限となります。 この値は、競合が発生してもそれに対応できる程度に十分長い時間としなければならないと同時に、無応答やブラウザータイムアウトとなる前にユーザーに対して適切なエラー情報を提供できる程度に短い時間でなければなりません。 | 30000 |
高度な設定通常は以下の設定を変更する必要はありません。必要ならば、Apache DBCP ドキュメントをご覧ください。 | ||||
プールステートメント |
| データベース接続プールにおいてプリペアドステートメントのプーリングを有効にします。 | false | |
最大オープンステートメント |
| ステートメントプールから同時に割り当て可能な空きステートメントの最大数。 | 例外の原因となるため、デフォルト値を修正しないでください。 | 0 |
バリデーションクエリ |
| 接続プールから取り出された接続の検証を行う SQL クエリです。指定する場合、クエリは少なくとも1つの行を返す SQL SELECT 文でなければなりません。 | 詳細については、 コネクション切断の問題を乗り越える方法 を参照してください。 | select 1 (または、 |
バリデーションクエリのタイムアウト |
| 検証クエリがデータベース接続の破損を検出するまでのシステム待ち時間 (単位は秒)。 | 検証クエリは処理量の小さいものを使用するためこの時間は非常に短い時間で構いません。 上で Validation Query を指定した場合は Validation Query Timeout の値も指定しなければなりません。指定しない場合は '-1' が設定され、データベースの破損が起こっていない場合でも、システムは破損を無期限に待ち続けます。 これは、MySQL でのみ行います。MySQL 以外のデータベースでバリデーション クエリ タイムアウトを使用すると、Jira インスタンスに重大な問題が生じます。 | 3 (または、 |
借りるときにテスト |
| Jira がデータベース コネクション プールからデータベース コネクションを借りたときに、それが正しく機能するかどうかをテストします。 そのデータベース接続が破損している場合はプールから削除されます。 | Jira はデータベース処理のたびにコネクションを借りるため、この値は常に "false" にします。 テータベース接続のクローズがうまくいかないという問題が定常的に発生する場合はこのオプションを 'true' にしてみてください。ただし、この方法は、Time Between Eviction Runs の値を小さくしてもデータベース接続のクローズ時の問題発生を防ぐことも軽減することもできない場合の最終手段とするべきです。 | True ( |
返却時にテスト |
| Jira がデータベース コネクション プールにデータベース コネクションを返却したときに、それが正しく機能するかどうかをテストします。 そのデータベース接続が破損している場合はプールから削除されます。 | Jira はデータベース処理のたびに借りたコネクションを返却するため、この値は常に "false" とします。 | false |
アイドル状態にテスト |
| データベース接続がアイドル状態のときに正しく機能しているか否かを定期的にテストします。 そのデータベース接続が破損している場合はプールから削除されます。 | MySQL の場合はこれを 'true' にします。 MySQL データベース サーバは既定で、一定の連続時間を過ぎると、使用されていないデータベース コネクションをクローズします。Jira インストールでは My SQL データベースを使用しますが、Jira では長時間 (たとえば一晩) におよぶ非アクティブ状態が発生することがあるため、このことが問題となります。このバラメーターを "true" にすることでこの問題を回避することができます。 なお、Test While Idle の指定が必要となるのは、上で説明した Validation Query を指定したときのみです。 | true false |
追い出し実行間の時間 |
| アイドルオブジェクトのエビクションスレッド実行間隔 (単位はミリ秒)。ゼロまたは負の値を指定するとアイドルオブジェクトのエビクションスレッドは実行されません。 エビクションスレッドは、アイドル状態にあるデータベース接続数が上で説明した Minimum Idle/Size を超えたときにアイドル状態にあるデータベース接続を削除します。 | MySQL の場合、接続のエビクションとテストを正常に行うためにはこのパラメーターを大きめの正の値に設定します。一般的に妥当な値は300000 (5 分) です。 テータベース接続のクローズがうまくいかないという問題が定常的に発生する場合はこのオプション値を小さめにしてみてください。 | 300000 5000 (または、 |
追い出し可能な最小限のアイドル時間 |
| アイドルオブジェクトのエビクションを実行する場合に、データベース接続プール内のオブジェクトがアイドルオブジェクトエビクションの対象となるまでのアイドル状態最小時間。 | 60000 4000 (または、 | |
クローズ漏れの削除 |
| データベース接続のクローズ漏れ状態が次の Removed Abandoned Timeout で指定した時間を超えたときにそれを削除するか否かのフラグ。 内部エラーが発生した場合、Jira が借りたコネクションが返されないことがあります。これが頻繁に起こると、プール内のデータベース コネクションが不足し、Jira のパフォーマンス低下や完全な動作停止を引き起こす恐れがあります。 | この値は 'true' にします。 これによってクローズ漏れ状態の接続を整理してプール内の接続数を回復し、システムパフォーマンスの低下を防止します。 | true |
クローズ漏れの削除のタイムアウト |
| データベース接続がクローズ漏れと判定されるまでのアイドル状態継続時間 (単位は秒)。 | 300 |
* 注意:
- Jira は以下の操作のあとに、上述の表の一番右の列の既定値を
dbconfig.xml
ファイルの要素に書き込みます。- Jira セットアップ ウィザード を最後まで実行したとき。
- データベース コネクションの設定やチューニングを行うために Jira 設定ツールの [詳細] タブを使用したとき。なお、この場合は、各エレメントに対応するオプションの一番左のチェックボックスが選択されていなくても、デフォルト値の書き込みが行われます。
- ただし、値の下に '(
dbconfig.xml
で指定されていない場合)' と表示されている要素は例外です。これらの要素は次のようになります。- Jira セットアップ ウィザードを最後まで実行したあとは、
dbconfig.xml
には書き込まれません。 - 次の場合にのみ
dbconfig.xml
ファイルへの書き込みが行われます:- このファイルを手作業で書き換えたとき
- Jira 設定ツールの詳細タブを使用し、エレメントに対応するオプションの一番左のチェックボックスを選択して、オプションの値を指定したとき。
- Jira セットアップ ウィザードを最後まで実行したあとは、
- 上述の表の一番右の列で、既定値の下に "(
dbconfig.xml
で指定されていない場合)" と表示されている要素では、dbconfig.xml
ファイルに要素が存在しない場合でも既定値が適用されます。
接続プールの監視
Jira の "データベース監視" ページでデータベース コネクションの使用状況を確認できます。詳細については、「データベース コネクションの使用状況の監視」をご覧ください。