データベース接続のチューニング

Jira では、基盤となるデータベースへのアクセスを管理するために、Apache Commons DBCP (DataBase Connection Pool) に基づくデータベース コネクション プールを利用します。

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 からの新たなデータベース アクセス要求のたびに、確立済みのテータベース コネクション プールからコネクションが使用されます。したがって、次のようになります。

  1. Jira の起動時にはプール内において Jira とデータベース間の最小限のデータベース コネクションが確立されます。
  2. Jira からデータベースにアクセスする必要がある場合、Jira では次のような処理が行われます。
    1. プールに対してデータベース接続を要求します
    2. そのデータベース接続を使用してデータベースの読み出しまたは書き込みを行います
    3. 処理が終了するとデータベース接続をプールに戻します。

Jira のデータベース アクセス要求の頻度がプールにおける利用可能な接続数を超え始めたときは、負荷を処理するためにコネクションが自動的に追加されます。

逆に、Jira のデータベース アクセス要求の頻度がプールにおける利用可能なデータベース コネクション数を下回り始めると、接続を自動的にクローズしてリソースをシステムに返すようにすることができます。

最近のデータベースは多数の接続を比較的簡単に処理することが可能で、メモリーさえ十分にあれば同時接続可能数は数百にもなります。ただし、クライ アント側では接続は大量のメモリーを消費します。従って、最大接続数をそれよりずっと小さい数に制限して、接続する必要が生じたアプリケーションがほぼ待 つことなく接続を利用できるようにするのが一般的です。

Jira データベース コネクションのチューニング

  1. Jira インストールをシャットダウンします。
  2. 次のいずれかを行います。
    • Jira 設定ツール を使用して、Jira のデータベース接続を調整します。
      1. Jira 設定ツールを起動します。
        (info) 注意: Jira 設定ツールを実行するために、JAVA_HOME 環境変数の設定が必要な場合があります。詳細については、「Java のインストール」を参照してください。
      2. Jira 設定ツールが起動したら、[詳細] タブをクリックします。
      3. このタブで指定可能なオプションの詳細については、下の 接続プールの設定 を参照してください。これらのオプションの値を指定するには、先に一番左のチェックボックスにチェックを入れる必要があります。
        (info) 上図のオプションのいくつかは、単なるチェックボックスです(たとえば、JIRA 設定ツールの中央付近にあるチェックボックス)。これらのチェックボックスにチェックを入れると、それに関連するオプションの値が「true」に設定されます。逆に、チェックをはずすと、それに関連するオプションの値が「false」に設定されます。
      4. [Save] ボタンをクリックして変更を保存すると、dbconfig.xml ファイルの要素として格納されます。
    • または、Jira ホーム ディレクトリのルートにある dbconfig.xml ファイルを編集します。
      1. Jira のデータベース コネクションのチューニングを行うために dbconfig.xml ファイルに追加できる要素の詳細については、後述の「コネクション プールの設定」をご覧ください。
      2. 編集済みの dbconfig.xml ファイルを保存します。
  3. Jira インストールを再起動します。

接続プールの設定

Jira 設定ツールの "詳細" タブのオプション

 dbconfig.xml の要素
説明
推奨事項/注意事項
デフォルト値*
最大サイズ

pool-max-size

同時にオープン可能なデータベース接続の最大数。

Jira がデータベース コネクション要求を送信したときに待機する必要がないよう、十分に大きい値を設定する必要があります。

このパラメーターの設定方法に関連するヒントは、下の「監視」の項目をご覧ください。

20

最大アイドル状態

pool-max-idle

プール内でアイドル状態のまま保持可能なデータベース接続の最大数。

この値を負に設定すると、プール内でアイドル状態のまま存在可能なデータベース接続の最大数は無制限になります。

下で説明する Minimum Idle/Size の値が上で説明した Maximum Size の値と同一の場合 (デフォルトではこれが成立します) は、この設定は無意味になります。

Maximum Size の値

最小アイドル状態/サイズ

pool-min-size

(min-idle)

同時にオープンしているアイドル状態のデータベース接続の最小数。

この値を上で説明した Maximum Size と同一にすると (デフォルトではこれが成立します)、プールにおける接続数は一定でアイドル接続がクローズされることはありません。

非常に大きな Jira インストールでは、これを Maximum Size よりも小さな値にすることでリソースが節約できる場合があります。

Maximum Size の値

初期サイズ

pool-initial-size

プール内でオープンされるデータベース接続の初期値。

Jira の起動時に多数のデータベース コネクションが迅速に作成されるため、この値は通常は (0 以外に) 設定しません。

0
(dbconfig.xml で指定されていない場合)

最大待機時間

pool-max-wait

プールに空きコネクションがない場合に、データベース コネクションが利用可能となるまでに Jira が待機する最大時間 (単位はミリ秒)。これを過ぎるとエラーが通知されます。

'-1' を指定すると Tomcat の待ち時間は無期限となります。

この値は、競合が発生してもそれに対応できる程度に十分長い時間としなければならないと同時に、無応答やブラウザータイムアウトとなる前にユーザーに対して適切なエラー情報を提供できる程度に短い時間でなければなりません。

30000

高度な設定

通常は以下の設定を変更する必要はありません。必要ならば、Apache DBCP ドキュメントをご覧ください。

プールステートメント

pool-prepared-statements

データベース接続プールにおいてプリペアドステートメントのプーリングを有効にします。

例外が発生するため、既定値の false を変更しないでください。詳細はJRA-44908 - 課題詳細の取得... ステータス を参照してください。

false
(dbconfig.xml で指定されていない場合)

最大オープンステートメント

max-open-prepared-statements

ステートメントプールから同時に割り当て可能な空きステートメントの最大数。

例外の原因となるため、デフォルト値を修正しないでください

0
(dbconfig.xml で指定されていない場合)

バリデーションクエリ

validation-query

接続プールから取り出された接続の検証を行う SQL クエリです。指定する場合、クエリは少なくとも1つの行を返す SQL SELECT 文でなければなりません。

詳細については、 コネクション切断の問題を乗り越える方法 を参照してください。

select 1
(MySQL の場合)

(または、dbconfig.xml で指定なし)

バリデーションクエリのタイムアウト

validation-query-timeout

検証クエリがデータベース接続の破損を検出するまでのシステム待ち時間 (単位は秒)。

検証クエリは処理量の小さいものを使用するためこの時間は非常に短い時間で構いません。

上で Validation Query を指定した場合は Validation Query Timeout の値も指定しなければなりません。指定しない場合は '-1' が設定され、データベースの破損が起こっていない場合でも、システムは破損を無期限に待ち続けます。

(warning) これは、MySQL でのみ行います。MySQL 以外のデータベースでバリデーション クエリ タイムアウトを使用すると、Jira インスタンスに重大な問題が生じます。

3
(MySQL の場合)

(または、dbconfig.xml で指定なし)

借りるときにテスト

pool-test-on-borrow

Jira がデータベース コネクション プールからデータベース コネクションを借りたときに、それが正しく機能するかどうかをテストします。

そのデータベース接続が破損している場合はプールから削除されます。

Jira はデータベース処理のたびにコネクションを借りるため、この値は常に "false" にします。

(tick) テータベース接続のクローズがうまくいかないという問題が定常的に発生する場合はこのオプションを 'true' にしてみてください。ただし、この方法は、Time Between Eviction Runs の値を小さくしてもデータベース接続のクローズ時の問題発生を防ぐことも軽減することもできない場合の最終手段とするべきです。

True (dbconfig.xml で指定されていない場合)。ただし、バリデーション クエリが明示的に指定されていない場合、この設定は有効になりませんMySQL は既定のバリデーション クエリを備えているため、この影響を受けます。

返却時にテスト

pool-test-on-return

Jira がデータベース コネクション プールにデータベース コネクションを返却したときに、それが正しく機能するかどうかをテストします。

そのデータベース接続が破損している場合はプールから削除されます。

Jira はデータベース処理のたびに借りたコネクションを返却するため、この値は常に "false" とします。

false
(dbconfig.xml で指定されていない場合)

アイドル状態にテスト

pool-test-while-idle

データベース接続がアイドル状態のときに正しく機能しているか否かを定期的にテストします。

そのデータベース接続が破損している場合はプールから削除されます。

MySQL の場合はこれを 'true' にします。

MySQL データベース サーバは既定で、一定の連続時間を過ぎると、使用されていないデータベース コネクションをクローズします。Jira インストールでは My SQL データベースを使用しますが、Jira では長時間 (たとえば一晩) におよぶ非アクティブ状態が発生することがあるため、このことが問題となります。このバラメーターを "true" にすることでこの問題を回避することができます。

なお、Test While Idle の指定が必要となるのは、上で説明した Validation Query を指定したときのみです。

true
(MySQL の場合)

false
(dbconfig.xml で指定されていない場合)

追い出し実行間の時間

time-between-eviction-runs-millis

アイドルオブジェクトのエビクションスレッド実行間隔 (単位はミリ秒)。ゼロまたは負の値を指定するとアイドルオブジェクトのエビクションスレッドは実行されません。

エビクションスレッドは、アイドル状態にあるデータベース接続数が上で説明した Minimum Idle/Size を超えたときにアイドル状態にあるデータベース接続を削除します。

MySQL の場合、接続のエビクションとテストを正常に行うためにはこのパラメーターを大きめの正の値に設定します。一般的に妥当な値は300000 (5 分) です。

(tick) テータベース接続のクローズがうまくいかないという問題が定常的に発生する場合はこのオプション値を小さめにしてみてください。

300000
(MySQL の場合)

5000
(HSQLDB の場合)

(または、dbconfig.xml で指定なし)

追い出し可能な最小限のアイドル時間

min-evictable-idle-time-millis

アイドルオブジェクトのエビクションを実行する場合に、データベース接続プール内のオブジェクトがアイドルオブジェクトエビクションの対象となるまでのアイドル状態最小時間。


60000
(MySQL の場合)

4000
(HSQLDB の場合)

(または、dbconfig.xml で指定なし)

クローズ漏れの削除

pool-remove-abandoned

データベース接続のクローズ漏れ状態が次の Removed Abandoned Timeout で指定した時間を超えたときにそれを削除するか否かのフラグ。

内部エラーが発生した場合、Jira が借りたコネクションが返されないことがあります。これが頻繁に起こると、プール内のデータベース コネクションが不足し、Jira のパフォーマンス低下や完全な動作停止を引き起こす恐れがあります。

この値は 'true' にします。

これによってクローズ漏れ状態の接続を整理してプール内の接続数を回復し、システムパフォーマンスの低下を防止します。

true

クローズ漏れの削除のタイムアウト

pool-remove-abandoned-timeout

データベース接続がクローズ漏れと判定されるまでのアイドル状態継続時間 (単位は秒)。


300

* (info) 注意:

  • Jira は以下の操作のあとに、上述の表の一番右の列の既定値を dbconfig.xml ファイルの要素に書き込みます。
    • Jira セットアップ ウィザード を最後まで実行したとき。
    • データベース コネクションの設定やチューニングを行うために Jira 設定ツールの [詳細] タブを使用したとき。なお、この場合は、各エレメントに対応するオプションの一番左のチェックボックスが選択されていなくても、デフォルト値の書き込みが行われます。
  • ただし、値の下に '(dbconfig.xml で指定されていない場合)' と表示されている要素は例外です。これらの要素は次のようになります。
    • Jira セットアップ ウィザードを最後まで実行したあとは、dbconfig.xml には書き込まれません。
    • 次の場合にのみ dbconfig.xml ファイルへの書き込みが行われます:
      • このファイルを手作業で書き換えたとき
      • Jira 設定ツールの詳細タブを使用し、エレメントに対応するオプションの一番左のチェックボックスを選択して、オプションの値を指定したとき。
  • 上述の表の一番右の列で、既定値の下に "(dbconfig.xml で指定されていない場合)" と表示されている要素では、dbconfig.xml ファイルに要素が存在しない場合でも既定値が適用されます。

接続プールの監視

Jira の "データベース監視" ページでデータベース コネクションの使用状況を確認できます。詳細については、「データベース コネクションの使用状況の監視」をご覧ください。

最終更新日 2018 年 8 月 7 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.