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

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 のデータベース コネクションの利用状況を視覚的にモニタリングするツールが用意されています。

On this page:

接続プールアーキテクチャー

Jira がデータベースにアクセスする (読み込みまたは書き込みを行う) 必要がある際は、データベース コネクションが必要になります。

データベース コネクションは複雑かつ大規模なオブジェクトであり、Jira とそのデータベース間のすべての通信を処理します。したがって、データベース コネクションの確立は時間のかかる処理であり、クライアント (Jira アプリケーション) とデータベース サーバーの両方で大量のメモリーを消費します。

Jira のデータベース アクセス リクエストに対して毎回新しいデータベース コネクションを確立することで生じる負荷を回避するために、事前に確立済みのテータベース コネクション プールが維持されます。Jira からデータベースへのアクセスが新たにリクエストされるたびに、事前に確立されたこのコネクション プールのコネクションが使用されます。その結果、次のようになります。

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

Jira のデータベース アクセス リクエストの頻度がプール内の利用可能なデータベース コネクション数を超え始めた場合は、負荷を処理するために追加のコネクションが自動で作成されます。

逆に、Jira のデータベース アクセス リクエストの頻度がプール内の利用可能なデータベース コネクション数を下回り始めると、リソースをシステムに返すために、コネクションが自動的に閉じることがあります。

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

Jira のデータベース コネクションの調整

  1. Jira のインストール環境をシャットダウンします。
  2. 次のいずれかのオプションを選択して進めます。

Jira 設定ツールで Jira のデータベース コネクションを調整する

  1. Jira 設定ツールを次のように起動します。

    Jira 設定ツールを実行するには、JAVA_HOME 環境変数の設定が必要となる場合があります。詳細については「Java のインストール」をご覧ください。
  2. Jira 設定ツールが起動したら [詳細] タブをクリックします。
    Jira 設定ツール。
  3. このタブで利用可能なオプションの詳細については「接続プールの設定」をご参照ください。これらのオプションの値を指定するには、先にその一番左のチェックボックスをチェックする必要があります。

    前のスクリーンショットのいくつかのオプションは単純なチェックボックスです。これらのチェックボックスをチェックするとそれに関連するオプションの値が「true」に、逆にチェックを外すとそれに関連するオプションの値が「false」に設定されます。

  4. 変更を保存します。これらは要素として dbconfig.xml ファイルに保存されます。

dbconfig.xml ファイルを編集して Jira のデータベース コネクションを開始する

次の手順に従って、Jira ホーム ディレクトリのルートにある dbconfig.xml ファイルを編集します。

  1. コネクション プールの設定」を参照して、Jira のデータベース コネクションを微調整するために dbconfig.xml ファイルに追加できる要素の詳細を確認します。
  2. 編集済みの dbconfig.xml ファイルを保存します。
  3. Jira のインストール環境を再起動します。

DBCP 設定

  • 設定の既定値は、次のいずれかが実行された後に dbconfig.xml ファイルに書き込まれます。
    • Jira セットアップ ウィザードを実行した。
    • すべてのオプションで左端のチェックボックスをチェックしていない場合でも、Jira 設定ツールの [詳細設定] タブによってデータベース接続を設定した
  • 設定の既定値で注記「dbconfig.xml で指定されていない場合」が表示された場合は、次のいずれかを意味します。 
    • Jira セットアップ ウィザードを実行した後、関連要素が dbconfig.xml ファイルに書き込まれなかった
    • 次のいずれかの方法で、関連要素が dbconfig.xml ファイルに書き込まれた。
      • 担当ユーザーが手動で書き込んだ。
      • 左端のチェックボックスをチェックしてこれらのオプションの値を設定することで、[詳細設定] タブのオプションに従って指定された。
  • 設定の既定値で注記「dbconfig.xml で指定されていない場合」が表示された場合は、dbconfig.xml ファイルに存在しなくてもシステムはこの値を考慮します。

次の表に、すべての接続プール設定とその構成を示します。

Jira configuration tool "Advanced" tab option

 dbconfig.xml の要素

説明 

推奨事項/注意事項

デフォルト値*

最大サイズ

pool-max-size

いつでもオープンできるデータベース接続の最大数。

This value should be sufficiently large enough that Jira rarely needs to wait for a database connection to become available when Jira requires one.

このパラメーターの設定方法は「接続プールの監視」セクションをご参照ください。

20

最大アイドル状態

pool-max-idle

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

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

Minimum Idle/Size (下記参照) の値が Maximum Size (上述の設定) の値と同一の場合 (初期設定では同一) は、この設定は無意味になります。

Maximum Size の値

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

pool-min-size

(min-idle)

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

この値を Maximum Size (上述の設定) と同一にすると (初期設定では同一)、プールにおける接続数は一定でアイドル接続は絶対に切断されません。

On very large Jira installations, there may be some benefit in specifying a lower value for this setting than that of Maximum Size to conserve resources.

Maximum Size の値

初期サイズ

pool-initial-size

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

This setting is not usually configured (other than the default value of 0), since a number of database connections are quickly created when Jira starts up.

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

最大待機時間

pool-max-wait

The length of time (in milliseconds) that Jira is allowed to wait for a database connection to become available (while there are no free ones available in the pool), before returning an error.

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

この値は競合が発生してもそれに対応できるほど長い時間にする必要があると同時に、無応答やブラウザー タイムアウトになる前にユーザーに対して有意義なエラー情報を提供できるほど短い時間にする必要があります。

30000

高度な設定

通常、次の設定は変更不要です。必要に応じて Apache DBCP ドキュメントをご参照ください。

プールステートメント

pool-prepared-statements

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

Do not amend the default value of false, as it will cause exceptions. For more information, see JRA-44908 - Getting issue details... STATUS

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」の値が設定されて、データベースの破損が発生していなくてもシステムは破損を無期限に待ち続けます。

This should only be done for MySQL. Using a Validation Query Timeout on any database other than MySQL will cause significant problems with the Jira instance.

3
(MySQL の場合)

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

借りるときにテスト

pool-test-on-borrow

Tests if the database connection is valid when it is borrowed from the database connection pool by Jira.

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

This value should always be "false" as Jira borrows a connection for each database operation.

tip/resting Created with Sketch.

テータベース接続をうまく閉じれない問題が定常的に発生する場合は、このオプションを「true」にしてみてください。ただし、この方法は Time Between Eviction Runs の値を小さくしてもデータベース接続を閉じる際の問題の発生を防止も軽減もできない場合の最終手段としてください。

 

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

返却時にテスト

pool-test-on-return

Tests if the database connection is valid when it is returned to the database connection pool by Jira.

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

This value should always be "false" as Jira returns borrowed connections for each database operation.

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

アイドル状態にテスト

pool-test-while-idle

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

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

MySQL の場合はこれを「true」に設定する必要があります。

By default, MySQL database servers close database connections if they are not used for an extended period of time. This causes problems with Jira installations (which use MySQL databases) that are largely inactive for long periods, for example overnight. Setting this to "true" will work around this behavior.

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

true
(MySQL の場合)

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

追い出し実行間の時間

time-between-eviction-runs-millis

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

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

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

tip/resting Created with Sketch.

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

 

300000
(MySQL の場合)

5000
(HSQLDB の場合)

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

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

min-evictable-idle-time-millis

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


60000
(MySQL の場合)

4000
(HSQLDB の場合)

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

クローズ漏れの削除

pool-remove-abandoned

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

If an internal failure occurs, it is possible that Jira may borrow a connection and never return it. If this happens too often, then the pool may run short of database connections, causing Jira's performance to degrade or Jira to fail altogether.

この値は「true」に設定する必要があります。

これによってプールで対象から漏れた接続を回復して、システム パフォーマンスの低下を防止します。

true

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

pool-remove-abandoned-timeout

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


300

接続プールの監視

Jira ではデータベース接続の使用状況を [データベース監視] ページで確認できます。詳細については、「データベース接続使用率の監視」を参照してください。

最終更新日 2022 年 5 月 25 日

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

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