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

Jira uses the database connection pool (DBCP) based on Apache Commons DBCP to manage Jira's access to its underlying database.

In earlier Jira versions, the database connection pool was handled purely through the Apache Tomcat application server running Jira.

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 of database connection pool settings defined in Jira's dbconfig.xml file has 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 in the following sections.

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.

このページの内容

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

Whenever Jira needs to access (read from or write to) its database, a database connection is required.

A database connection is a large and complex object that handles all communication between Jira and its database. As such, database connections are time-consuming to establish and consume a significant amount of memory on both the client (the Jira application) and the database server.

To avoid the impact of creating a new database connection for each Jira's database access request, a pool of pre-established database connections is maintained. Each new database access request made by Jira uses a connection from this pool of pre-established connections, as required. This results in the following:

  1. Jira の起動時にはプール内において Jira とデータベース間の最小限のデータベース コネクションが確立されます。
  2. When Jira needs to access its database, it:
    1. プールに対してデータベース接続を要求します
    2. そのデータベース接続を使用してデータベースの読み出しまたは書き込みを行います
    3. returns the database connection to the pool when finished

If the frequency of Jira's database access requests begins to exceed the number of available database connections in the pool, extra connections are automatically created to handle the load.

Conversely, if the frequency of Jira's database access requests begins to drop below the number of available database connections in the pool, connections can be automatically closed to release resources back to the system.

Modern databases can handle hundreds of connections relatively easily and with sufficient memory. On the client side, however, these connections can consume a significant amount of memory. Hence, it is generally best to limit the number of connections to a much smaller number while having a sufficient number for the application so that it doesn't wait for a connection when it needs one.

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

  1. Jira インストールをシャットダウンします。
  2. Proceed with one of the following options:

Use Jira configuration tool to start Jira 's database connections

  1. Start the Jira  configuration tool:

    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, select the Advanced tab.
    Jira 設定ツール。
  3. Refer to the Connection pool settings for more information about the options on this tab. To specify a value for one of these options, ensure that its leftmost checkbox has been selected first.

    Some options on the preceding screenshot are simple checkboxes. Selecting these checkboxes sets the values of their associated options to "true". Conversely, clearing these checkboxes sets the values of their associated options to "false".

  4. Save your changes. They will be stored as elements in your dbconfig.xml file.

Editing the dbconfig.xml file to start Jira 's database connections

Edit the dbconfig.xml file at the root of your Jira home directory:

  1. Refer to the Connection pool settings  for more information about the elements you can add to your  dbconfig.xml file to fine-tune Jira 's database connection.
  2. Save your edited dbconfig.xml file.
  3. Jira インストールを再起動します。

DBCP settings

  • The default values of the settings will be written to the dbconfig.xml file after one of the following takes place:
    • You’ve run the Jira setup wizard.
    • You’ve used the  Advanced  tab of the Jira configuration tool to configure your database connection, even if you haven’t selected any leftmost checkbox for any option.
  • If you see the note “when not specified in dbconfig.xml” for the default value of the setting, it means one of the following: 
    • The related element wasn’t written to the dbconfig.xml file after you’ve run the  Jira setup wizard .
    • The related element was written to the dbconfig.xml file in one of the following ways:
      • Manually by the accountable user
      • According to the options on the Advanced  tab specified by selecting their leftmost checkboxes and setting values for these options.
  • If you see the note “when not specified in dbconfig.xml” for the default value of the setting, the system will consider this value even though it may be not present in your dbconfig.xml file.

The following table features all connection pool settings and their configuration.

Jira configuration tool "Advanced" tab option

 dbconfig.xml の要素

説明 

推奨事項/注意事項

デフォルト値*

最大サイズ

pool-max-size

The maximum number of database connections that can be open at any time.

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

See the Monitoring the connection pool section for suggestions on how to set this parameter.

20

最大アイドル状態

pool-max-idle

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

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

If the value of Minimum Idle/Size (see the following setting) is the same as that of Maximum Size (the previous setting), which is the case by default, then this setting has no effect.

Maximum Size の値

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

pool-min-size

(min-idle)

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

Having this value set to that of Maximum Size (the previous setting), which is the case by default, means the pool will always have a fixed number of connections and idle connections will never be closed.

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

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

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

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

最大待機時間

pool-max-wait

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

Specifying a value of "-1" means that Tomcat will wait indefinitely.

You should specify a time here which is long enough to allow for any contention spikes, but short enough that users will receive a meaningful error rather than just getting no response or a browser timeout.

30000

高度な設定

Generally, changing the following settings isn't required. Refer to the Apache DBCP documentation if necessary.

プールステートメント

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

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

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

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

バリデーションクエリ

validation-query

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

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

select 1
(MySQL の場合)

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

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

validation-query-timeout

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

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

If you specify a Validation Query above, then you should specify a value for the Validation Query Timeout too. If not, a value of "-1" is assumed, which results in the system waiting indefinitely until a validation query succeeds against a broken database connection, which it never will.

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

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

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

tip/resting Created with Sketch.

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 f or MySQL, which has a default Validation Query, and it will therefore have an effect.

返却時にテスト

pool-test-on-return

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

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

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

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

アイドル状態にテスト

pool-test-while-idle

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

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

This should be set to "true" for MySQL.

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 で指定した時間を超えたときにそれを削除するか否かのフラグ。

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

This value should be set to "true".

This will allow the pool to recover any abandoned connections and prevent this from affecting system performance.

true

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

pool-remove-abandoned-timeout

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


300

接続プールの監視

Jira provides a view of its database connection usage via the Database Monitoring page. See Monitoring database connection usage for more information.

最終更新日 2022 年 5 月 25 日

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

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