データベース接続のチューニング
接続プールアーキテクチャー
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 ドキュメントをご参照ください。 | |||
プールステートメント |
|
| データベース接続プールにおいてプリペアドステートメントのプーリングを有効にします。 例外が発生するため、既定値を変更しないでください。詳細については、JRA-44908 - 課題情報を取得中... ステータスを参照してください。 |
最大オープンステートメント |
|
| ステートメントプールから同時に割り当て可能な空きステートメントの最大数。 例外の原因となるため、既定値は変更しないでください。 |
バリデーションクエリ |
|
(または、 | 接続プールから取り出された接続の検証を行う SQL クエリです。指定する場合、クエリは少なくとも1つの行を返す SQL SELECT 文でなければなりません。 |
バリデーションクエリのタイムアウト |
|
(または、 | MySQL に対してのみ設定してください。他のデータベースで検証クエリ タイムアウトの設定を使用すると、Jira インスタンスのパフォーマンスに悪影響を及ぼします。 検証クエリは処理量を最小限に抑えるように設計する必要があるため、この時間は非常に短くしてください。 |
借りるときにテスト |
|
検証クエリが明示的に指定されていない限り、これは有効になりません。既定の検証クエリがある MySQL については、例外で有効になります。 | Jira がデータベース接続プールからデータベース接続を借りたときに、それが正しく機能するかどうかをテストします。 |
返却時にテスト |
|
| Jira がデータベース接続プールにデータベース接続を返却したときに、それが正しく機能するかどうかをテストします。 |
アイドル状態にテスト |
|
| データベース接続がアイドル状態のときに正しく機能しているかどうかを定期的にテストします。 |
追い出し実行間の時間 |
|
(または、 | アイドル オブジェクトのエビクション スレッド実行間隔 (ミリ秒単位)。ゼロまたは負の値を指定すると、アイドル オブジェクトのエビクション スレッドは実行されません。 エビクション スレッドでは、アイドル状態にあるデータベース接続数が "最小アイドル状態" または "最大サイズ" の値を超えた場合にそれらの接続が削除されます。 |
追い出し可能な最小限のアイドル時間 |
|
(または、 | データベース接続プールでオブジェクトがアイドル状態になってから、エビクションの対象になるまでの最小時間。 |
クローズ漏れの削除 |
|
| データベース接続のクローズ漏れ状態が "クローズ漏れの削除のタイムアウト" の値を超えた場合にそれらのデータベース接続を削除するかどうかを示すフラグ。 既定値を変更しないでください。その結果、プールでクローズ漏れ状態の接続を復旧し、システム パフォーマンスの低下を防止できるようになります。 |
クローズ漏れの削除のタイムアウト |
|
| データベース接続がクローズ漏れと判定されるまでのアイドル状態継続時間 (秒単位)。 |
接続プールの監視
Jira ではデータベース接続の使用状況を [データベース監視] ページで確認できます。詳細は「データベース接続使用率の監視」をご参照ください。