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

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.

On this page:

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

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. When Jira starts up, a minimum number of database connections are established in the pool between Jira and its database.
  2. When Jira needs to access its database, it:
    1. プールに対してデータベース接続を要求します
    2. そのデータベース接続を使用してデータベースの読み出しまたは書き込みを行います
    3. 処理が終了するとデータベース接続をプールに戻す

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.

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

Tuning Jira's database connections

  1. Shut down your Jira installation.
  2. 次のいずれかのオプションを選択して進めます。

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. このタブで利用可能なオプションの詳細については「接続プールの設定」をご参照ください。これらのオプションの値を指定するには、先にその一番左のチェックボックスをチェックする必要があります。

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

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

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

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

  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. 編集済みの dbconfig.xml ファイルを保存します。
  3. Restart your Jira installation.

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

20

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

ヒント

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

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

最大アイドル状態

pool-max-idle

Maximum Size の値

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

ヒント
  • この値を負に設定すると、プール内でアイドル状態のまま存在可能なデータベース接続の最大数は無制限になります。
  • 既定では、最小アイドル状態最小サイズの設定の値は、最大サイズの値と同じです。そのため、最大アイドル状態の効果はありません。
最小サイズ

pool-min-size

(min-idle)

Maximum Size の値

いつでもオープンできるアイドル状態のデータベース接続の最小数。

最小サイズと最大サイズの既定値が同じなのはなぜか

最小サイズの既定値は、最大サイズのデフォルト値と同じです。つまり、プールの接続数は常に固定され、アイドル接続がクローズされることはありません。

Jira インストール環境が大規模な場合は、最小サイズの値を小さく設定するとリソースの節約に役立ちます。

最小アイドル状態

pool-min-idle

最小サイズの値プール内でアイドル状態のまま保持可能なデータベース接続の最小数。
初期サイズ

pool-initial-size

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

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

This setting is not usually configured to other values than the default one, because database connections are created fast when Jira starts up.

最大待機時間

pool-max-wait

30000

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

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

高度な設定

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

プールステートメント

pool-prepared-statements

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

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

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

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

max-open-prepared-statements

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

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

例外の原因となるため、既定値は変更しないでください

バリデーションクエリ

validation-query

select 1
(MySQL の場合)

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

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

どのデータベースにどのような検証クエリが推奨されるか

MySQL – select 1

Microsoft SQL Server – select 1

Oracle – select 1 from dual

PostgreSQL – select version();

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

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

validation-query-timeout

3
(MySQL の場合)

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

MySQL に対してのみ設定してください。他のデータベースで検証クエリ タイムアウトの設定を使用すると、Jira インスタンスのパフォーマンスに悪影響を及ぼします。

検証クエリは処理量を最小限に抑えるように設計する必要があるため、この時間は非常に短くしてください。

ヒント

検証クエリを指定した場合は、検証クエリ タイムアウトの値も指定する必要があります。

指定しない場合は、値 -1 が既定で使用されます。その結果、システムは、切断されたデータベース接続に対して検証クエリが成功するまで無期限に待機することになります。

借りるときにテスト

pool-test-on-borrow

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

(info) 検証クエリが明示的に指定されていない限り、これは有効になりません。既定の検証クエリがある MySQL については、例外で有効になります。

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

ヒント
  • そのデータベース接続が切断されている場合はプールから削除されます。
  • For Jira to borrow a connection for each database operation, set the value to false.
  • テータベース接続のクローズ時に問題が発生する場合は、このオプションを true に設定してみてください。ただし、この方法は、"追い出し実行間の時間" の値を小さくしてもデータベース接続のクローズ時の問題発生を防ぐことも軽減することもできない場合の最終手段としてください。
返却時にテスト

pool-test-on-return

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

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

ヒント
  • そのデータベース接続が切断されている場合はプールから削除されます。
  • For Jira to borrow a connection for each database operation, set the value to false.
アイドル状態にテスト

pool-test-while-idle

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

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

ヒント
  • "アイドル状態にテスト" は、検証クエリを設定した場合にのみ設定してください。
  • そのデータベース接続が切断されている場合はプールから削除されます。
MySQL に関するメモ

既定では、MySQL データベース サーバーは、データベース接続が長期間使用されていなければデータベース接続をクローズします。

This causes problems with Jira installations that use MySQL databases and are largely inactive for long periods, for example overnight. Setting Test While Idle to true is a workaround for this behavior.

追い出し実行間の時間

time-between-eviction-runs-millis

  • 300000 (MySQL の場合)
  • 5000 (HSQLDB の場合)

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

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

エビクション スレッドでは、アイドル状態にあるデータベース接続数が "最小アイドル状態" または "最大サイズ" の値を超えた場合にそれらの接続が削除されます。

ヒント
  • MySQL の場合、接続のエビクションとテストを正常に行うためにはこの値を大きめの正の値に設定します。妥当な値は 300000 (5 分) です。
  • データベース接続をクローズしても問題が解決しない場合は、小さい値を設定してみてください。
追い出し可能な最小限のアイドル時間

min-evictable-idle-time-millis

  • 60000 (MySQL の場合)
  • 4000 (HSQLDB の場合)

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

データベース接続プールでオブジェクトがアイドル状態になってから、エビクションの対象になるまでの最小時間。
クローズ漏れの削除

pool-remove-abandoned

true

データベース接続のクローズ漏れ状態が "クローズ漏れの削除のタイムアウト" の値を超えた場合にそれらのデータベース接続を削除するかどうかを示すフラグ。

既定値を変更しないでください。その結果、プールでクローズ漏れ状態の接続を復旧し、システム パフォーマンスの低下を防止できるようになります。

ヒント

If an internal failure occurs, Jira can borrow a connection and never return it. If this happens too often, the pool will run short of database connections, causing Jira performance to degrade or Jira to fail.

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

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.

Last modified on Mar 14, 2023

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

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