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

JIRA では、基本的動作であるデータベースへのアクセスを管理するために、Apache Commons DBCP (DataBase Connection Pool) に基づくデータベース接続プールを利用します。

In earlier JIRA versions, the database connection pool was handled purely through the Apache Tomcat application server running JIRA. However, from JIRA version 4.4, JIRA's dbconfig.xml file provides a set of database connection pool settings to Tomcat, which in turn are used by Tomcat to manage JIRA's database connection pool. From JIRA version 5.1, the number database connection pool settings defined in JIRA's dbconfig.xml file substantially increased.

The information on this page can help you tweak JIRA's database connection pool settings. You can do this by using the JIRA Configuration Tool or by directly editing JIRA's dbconfig.xml file, as described below.

The Advanced tab of the JIRA Configuration Tool makes it easier to both configure and control JIRA's database connection pool. The Database Monitoring page (accessible to JIRA system administrators) provides a visual tool for monitoring JIRA's database connection usage.

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

JIRA がデータベースにアクセスする (即ち、読み出しまたは書き込みを行う) 場合、必ずデータベース接続が必要になります。

データベース接続とは、JIRA とデータベース間のすべての通信を処理する、複雑でサイズも大きなオブジェクトを意味します。従ってデータベース接続の確立は時間のかかる処理であり、ま たクライアント (JIRA アプリケーション) とデータベースサーバーの双方で大量のメモリーを消費します。

JIRA からのデータベースアクセス要求に対して毎回新しいデータベース接続を確立するという重い処理を回避するために、既に確立されたテータベース接続のプール を維持管理する方法がとられています。JIRA からの新たなデータベースアクセス要求のたびに、既に確立されたテータベース接続プールから要求に応じて選ばれた接続が利用されます。従って :

  1. JIRA の起動時にはプール内において JIRA とデータベース間の最小限のデータベース接続が確立されます。
  2. JIRA からデータベースにアクセスする必要が生じたときには、JIRA は :
    1. プールに対してデータベース接続を要求します
    2. そのデータベース接続を使用してデータベースの読み出しまたは書き込みを行います
    3. 処理が終了するとデータベース接続をプールに戻します。

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

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

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

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

JIRA のデータベース接続をチューニングするには :

  1. JIRA を終了します。
  2. 次のいずれかを行います。
    • If you are using a 'Recommended' distribution of JIRA, use the JIRA Configuration Tool to tune JIRA's database connections.
      1. JIRA 設定ツールを起動します :
        (info) Please Note: You may need to set the JAVA_HOME environment variable to run the JIRA Configuration Tool. See Installing Java for details.
      2. Once the JIRA Configuration Tool is running, click its Advanced tab.
      3. Refer to Connection pool settings below for more information about the options on this tab. To specify a value for one of these options, ensure its leftmost check box has been selected first.
        (info) Some options above are simple check boxes (i.e. in the centre of the JIRA Configuration Tool). Selecting these check boxes sets the values of their associated options to 'true'. Conversely, clearing these check boxes sets the values of their associated options to 'false'.
      4. [Save] ボタンをクリックして変更を保存すると、dbconfig.xml ファイルの要素として格納されます。
    • Alternatively, edit the dbconfig.xml file at the root of your JIRA Home Directory.
      1. Refer to Connection pool settings below for more information about the elements you can add to your dbconfig.xml file to fine tune JIRA's database connection.
      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

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

Do not amend the default value of false, as it will cause exceptions. For more information see JRASERVER-44908 - DBPC configuration pool-prepared-statements leads to Statement Leak Closed

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

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

max-open-prepared-statements

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

Do not amend the default value, as it will cause exceptions.

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

バリデーションクエリ

validation-query

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

See Surviving Connection Closures for more information.

select 1
(MySQL の場合)

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

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

validation-query-timeout

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

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

MySQL に検証クエリを指定した場合は 検証クエリタイムアウトの値も指定しなければなりません。指定しない場合は「-1」が設定され、データベースの破損が起こっていない場合でも、システムは破損を無期限に待ち続けます。

(warning) 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

JIRA がデータベース接続プールからデータベース接続を「借りた」ときにそれが正しく機能するか否かをテストします。

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

JIRA はデータベース処理のたびに接続を借りるので、この値は常に 'false' にします。

(tick) If you continue to have problems with database connections closing, try setting this option to 'true'. However, this should only be used as a last resort and only in the event that decreasing the value of Time Between Eviction Runs has not reduced or prevented problems with database connections closing.

True (when not specified in dbconfig.xml), however this does not take effect unless a Validation Query has been explicitly specified, except for MySQL, which has a default Validation Query, and it will therefore have an effect.

返却時にテスト

pool-test-on-return

JIRA がデータベース接続プールにデータベース接続を「返した」ときにそれが正しく機能するか否かをテストします。

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

JIRA はデータベース処理のたびに借りた接続を返しますので、この値は常に 'false' とします。

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

アイドル状態にテスト

pool-test-while-idle

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

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

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

デフォルトでは、MySQL データベースサーバーは、データベース処理終了後にデータベース接続が使用されていなければその接続をクローズします。JIRA はアクティブに動作しない時間が長時間 (例えば一晩) に及ぶことが多いため、MySQL を利用している場合はこのことが問題となります。このバラメーターを '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) Please Note:

  • JIRA writes elements with their default values (in the right-hand column of the table above) to the dbconfig.xml file after:
    • You have run through the JIRA Setup Wizard or
    • データベース接続の設定やチューニングを行うために JIRA 設定ツールの Advanced タブを使用したとき。なお、この場合は各エレメントに対応するオプションの一番左のチェックボックスがチェックされていなくてもデフォルト値の書き込みが行われます。
  • ただし、値の下に '(dbconfig.xml で指定されていない場合)' と表示されている要素は例外です。これらの要素は次のようになります。
    • Not written to the dbconfig.xml file after running through the JIRA Setup Wizard.
    • 次の場合にのみ dbconfig.xml ファイルへの書き込みが行われます:
      • このファイルを手作業で書き換えたとき
      • JIRA 設定ツールの Advanced タブを使用し、エレメントに対応するオプションの一番左のチェックボックスにチェックを入れてから値を指定したとき
  • 上述の表の一番右の列で、既定値の下に "(dbconfig.xml で指定されていない場合)" と表示されている要素では、dbconfig.xml ファイルに要素が存在しない場合でも既定値が適用されます。

接続プールの監視

JIRA provides a view of its database connection usage via the 'Database Monitoring' page. See Monitoring Database Connection Usage for more information.

 

Last modified on Mar 4, 2016

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

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