データベース接続のチューニング
Jira は Apache Commons DBCP に基づく DBCP (データベース コネクション プール) によって、基盤となるデータベースへの Jira のアクセスを管理します。
Jira の以前のバージョンでは、データベース コネクション プールは Jira を実行している Apache Tomcat アプリケーション サーバー経由でのみ処理されていました。
Jira バージョン 4.4 以降では、Jira の dbconfig.xml
ファイルが一連のデータベース コネクション プール設定を Tomcat に渡し、Tomcat がそれを利用して Jira のデータベース コネクション プールを管理します。
Jira バージョン 5.1 以降では、Jira の dbconfig.xml
ファイルで定義できるデータベース コネクション プールの設定数が大幅に増えました。
このページでは、Jira のデータベース コネクション プールを調整する方法を説明します。Jira 設定ツールを使用する方法と、Jira の dbconfig.xml
ファイルを直接編集する方法があります (以降のセクションを参照してください)。
Jira のデータベース コネクション プールの設定と管理には、Jira 設定ツールの詳細タブを使用することをお勧めします。データベース モニタリング ページ (Jira システム管理者がアクセス可能) には、Jira のデータベース コネクションの利用状況を視覚的にモニタリングするツールが用意されています。
接続プールアーキテクチャー
Jira がデータベースにアクセスする (読み込みまたは書き込みを行う) 必要がある際は、データベース コネクションが必要になります。
データベース コネクションは複雑かつ大規模なオブジェクトであり、Jira とそのデータベース間のすべての通信を処理します。したがって、データベース コネクションの確立は時間のかかる処理であり、クライアント (Jira アプリケーション) とデータベース サーバーの両方で大量のメモリーを消費します。
Jira のデータベース アクセス リクエストに対して毎回新しいデータベース コネクションを確立することで生じる負荷を回避するために、事前に確立済みのテータベース コネクション プールが維持されます。Jira からデータベースへのアクセスが新たにリクエストされるたびに、事前に確立されたこのコネクション プールのコネクションが使用されます。その結果、次のようになります。
- Jira の起動時にはプール内で Jira とそのデータベース間の最小限のデータベース コネクションが確立されます。
- Jira がデータベースにアクセスする必要がある場合は、次のような処理が行われます。
- プールに対してデータベース接続を要求します
- そのデータベース接続を使用してデータベースの読み出しまたは書き込みを行います
- 処理が終了するとデータベース接続をプールに戻す
Jira のデータベース アクセス リクエストの頻度がプール内の利用可能なデータベース コネクション数を超え始めた場合は、負荷を処理するために追加のコネクションが自動で作成されます。
逆に、Jira のデータベース アクセス リクエストの頻度がプール内の利用可能なデータベース コネクション数を下回り始めると、リソースをシステムに返すために、コネクションが自動的に閉じることがあります。
最近のデータベースは十分なメモリーさえあれば数百の接続を比較的簡単に処理できますが、クライアント側ではこれらの接続は大量のメモリーを消費します。そのため、最大接続数をそれよりずっと小さい数に制限して、接続する必要が生じたアプリケーションが待つことなく接続を利用できるようにするのが一般的です。
Jira のデータベース コネクションの調整
- Jira のインストール環境をシャットダウンします。
- 次のいずれかのオプションを選択して進めます。
- Jira 設定ツールを使用して、Jira のデータベース コネクションを調整します。
- Jira ホーム ディレクトリのルートにある
dbconfig.xml
ファイルを編集します。
Jira 設定ツールで Jira のデータベース コネクションを調整する
- Jira 設定ツールを次のように起動します。
- Windows: コマンド プロンプトを開いて、Jira インストール ディレクトリの
bin
サブディレクトリにあるconfig.bat
を実行します。 Linux/Unix: コンソールを開いて、Jira インストール ディレクトリの
bin
サブディレクトリにあるconfig.sh
を実行します。このコマンドは「No X11 DISPLAY 変数が原因で Jira アプリケーション設定ツールを起動できなかったのは、設定エラーによるもの」に記載のエラーで失敗する場合があります。その場合は、この記事の回避策をご参照ください。
Jira 設定ツールを実行するには、JAVA_HOME
環境変数の設定が必要となる場合があります。詳細については「Java のインストール」をご覧ください。 - Windows: コマンド プロンプトを開いて、Jira インストール ディレクトリの
- Jira 設定ツールが起動したら [詳細] タブをクリックします。
このタブで利用可能なオプションの詳細については「接続プールの設定」をご参照ください。これらのオプションの値を指定するには、先にその一番左のチェックボックスをチェックする必要があります。
前のスクリーンショットのいくつかのオプションは単純なチェックボックスです。これらのチェックボックスをチェックするとそれに関連するオプションの値が「true」に、逆にチェックを外すとそれに関連するオプションの値が「false」に設定されます。
- 変更を保存します。これらは要素として
dbconfig.xml
ファイルに保存されます。
dbconfig.xml ファイルを編集して Jira のデータベース コネクションを開始する
次の手順に従って、Jira ホーム ディレクトリのルートにある dbconfig.xml
ファイルを編集します。
- 「コネクション プールの設定」を参照して、Jira のデータベース コネクションを微調整するために
dbconfig.xml
ファイルに追加できる要素の詳細を確認します。 - 編集済みの
dbconfig.xml
ファイルを保存します。 - Jira のインストール環境を再起動します。
DBCP 設定
- 設定の既定値は、次のいずれかが実行された後に
dbconfig.xml
ファイルに書き込まれます。 - Jira セットアップ ウィザードを実行した。
- すべてのオプションで左端のチェックボックスをチェックしていない場合でも、Jira 設定ツールの [詳細設定] タブによってデータベース接続を設定した。
- 設定の既定値で注記「dbconfig.xml で指定されていない場合」が表示された場合は、次のいずれかを意味します。
- Jira セットアップ ウィザードを実行した後、関連要素が
dbconfig.xml
ファイルに書き込まれなかった。 - 次のいずれかの方法で、関連要素が
dbconfig.xml
ファイルに書き込まれた。 - 担当ユーザーが手動で書き込んだ。
- 左端のチェックボックスをチェックしてこれらのオプションの値を設定することで、[詳細設定] タブのオプションに従って指定された。
- 設定の既定値で注記「dbconfig.xml で指定されていない場合」が表示された場合は、dbconfig.xml ファイルに存在しなくてもシステムはこの値を考慮します。
次の表に、すべての接続プール設定とその構成を示します。
Jira 設定ツールの [詳細] タブのオプション | | 既定値 | 説明 |
最大サイズ |
| 20 | いつでもオープンできるデータベース接続の最大数。 |
最大アイドル状態 |
| Maximum Size の値 | プール内でアイドル状態のまま保持可能なデータベース接続の最大数。 |
最小サイズ |
( | Maximum Size の値 | いつでもオープンできるアイドル状態のデータベース接続の最小数。 |
最小アイドル状態 |
| 最小サイズの値 | プール内でアイドル状態のまま保持可能なデータベース接続の最小数。 |
初期サイズ |
| 0 | プール内でオープンされるデータベース接続の初期値。 Jira が起動されるとデータベース コネクションが迅速に作成されるため、通常この値を既定値以外に設定する必要はありません。 |
最大待機時間 |
| 30000 | プールに空きデータベース接続がない場合に、データベース接続が利用可能になるまでに Jira が待機する最大時間 (ミリ秒単位)。これを過ぎるとエラーが返されます。 |
高度な設定通常、次の設定は変更不要です。必要に応じて Apache DBCP ドキュメントをご参照ください。 | |||
プールステートメント |
|
| データベース接続プールにおいてプリペアドステートメントのプーリングを有効にします。 例外が発生するため、既定値を変更しないでください。詳細については、
|
最大オープンステートメント |
|
| ステートメントプールから同時に割り当て可能な空きステートメントの最大数。 例外の原因となるため、既定値は変更しないでください。 |
バリデーションクエリ |
|
(または、 | 接続プールから取り出された接続の検証を行う SQL クエリです。指定する場合、クエリは少なくとも1つの行を返す SQL SELECT 文でなければなりません。 |
バリデーションクエリのタイムアウト |
|
(または、 | MySQL に対してのみ設定してください。他のデータベースで検証クエリ タイムアウトの設定を使用すると、Jira インスタンスのパフォーマンスに悪影響を及ぼします。 検証クエリは処理量を最小限に抑えるように設計する必要があるため、この時間は非常に短くしてください。 |
借りるときにテスト |
|
| Jira がデータベース接続プールからデータベース接続を借りたときに、それが正しく機能するかどうかをテストします。 |
返却時にテスト |
|
| Jira がデータベース接続プールにデータベース接続を返却したときに、それが正しく機能するかどうかをテストします。 |
アイドル状態にテスト |
|
| データベース接続がアイドル状態のときに正しく機能しているかどうかを定期的にテストします。 |
追い出し実行間の時間 |
|
(または、 | アイドル オブジェクトのエビクション スレッド実行間隔 (ミリ秒単位)。ゼロまたは負の値を指定すると、アイドル オブジェクトのエビクション スレッドは実行されません。 エビクション スレッドでは、アイドル状態にあるデータベース接続数が "最小アイドル状態" または "最大サイズ" の値を超えた場合にそれらの接続が削除されます。 |
追い出し可能な最小限のアイドル時間 |
|
(または、 | データベース接続プールでオブジェクトがアイドル状態になってから、エビクションの対象になるまでの最小時間。 |
クローズ漏れの削除 |
|
| データベース接続のクローズ漏れ状態が "クローズ漏れの削除のタイムアウト" の値を超えた場合にそれらのデータベース接続を削除するかどうかを示すフラグ。 既定値を変更しないでください。その結果、プールでクローズ漏れ状態の接続を復旧し、システム パフォーマンスの低下を防止できるようになります。 |
クローズ漏れの削除のタイムアウト |
|
| データベース接続がクローズ漏れと判定されるまでのアイドル状態継続時間 (秒単位)。 |
接続プールの監視
Jira ではデータベース接続の使用状況を [データベース監視] ページで確認できます。詳細については、「データベース接続使用率の監視」を参照してください。