コネクション切断の問題を乗り越える方法

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

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

データベース サーバーがリブートしたり、ネットワーク障害が発生したりすると、データベース コネクション プール内のすべてのコネクションが切断されます。この問題を解決するには通常、Jira の再起動が必要になります。

しかし、単純な SQL クエリの実行によって、データベースのコネクションプール内のコネクションを有効にすることができます。プール内で切断されたデータベースコネクションが検出されると、新しいものが作成されてこれに置き替えられます。

To do this, you need to specify an optional <validation-query/> element (in the dbconfig.xml file of your Jira home directory), whose content is the query that validates connections in the database connection pool. See the following procedure for details.

Jira でデータベース コネクションのバリデーションを確実に行う

  1. Jira (または Jira を実行中の Tomcat インストール) をシャットダウンします。
  2. Jira ホームディレクトリdbconfig.xml ファイルを編集するか、 Jira 設定ツール の [詳細] タブを使用して、関連する設定を行います。
  3. お使いのデータベース向けのバリデーションクエリを設定します:
    • If editing the dbconfig.xml file, add the <validation-query/> element with the appropriate validation query for your type of database, as shown in the following example for MySQL. See Determining the validation query below for details.

      <?xml version="1.0" encoding="UTF-8"?>
       
      <jira-database-config>
        <name>defaultDS</name>
        <delegator-name>default</delegator-name>
        <database-type>mysql</database-type>
        <jdbc-datasource>
          <url>jdbc:mysql://dbserver:3306/jiradb?useUnicode=true&amp;characterEncoding=UTF8&amp;sessionVariables=storage_engine=InnoDB</url>
          <driver-class>com.mysql.jdbc.Driver</driver-class>
          <username>jiradbuser</username>
          <password>password</password>
          <pool-min-size>20</pool-min-size>
          <pool-max-size>20</pool-max-size>
          <pool-max-wait>30000</pool-max-wait>
       
          <validation-query>select 1</validation-query>
          <min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
          <time-between-eviction-runs-millis>300000</time-between-eviction-runs-millis>
       
          <pool-max-idle>20</pool-max-idle>
          <pool-remove-abandoned>true</pool-remove-abandoned>
          <pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
       
          <pool-test-while-idle>true</pool-test-while-idle>
          <pool-test-on-borrow>false</pool-test-on-borrow>
          <validation-query-timeout>3</validation-query-timeout>
       
        </jdbc-datasource>
      </jira-database-config>
      
    • If using the Jira configuration tool, on the Advanced tab, select the Validation Query checkbox and enter the appropriate validation query for your type of database. Check out  Determining the validation query for details.
  4. バリデーションクエリのタイムアウトを指定します。この値は、データベースコネクションが切断されたものとシステムが判断するまで、システムが待機しなくてはならない適当な時間 (秒単位) となります:
    • If editing the dbconfig.xml file, add the <validation-query-timeout/> element with the appropriate length of time (in seconds). 

      これは、MySQL でのみ行います。

    • Jira 設定ツールを利用する場合、[詳細] タブから [バリデーション クエリ タイムアウト] チェックボックスを選択し、適切な時間の長さ (秒単位) を入力します。
  5. 上記のバリデーション クエリのオプションに関連する、以下のオプションを指定することもできます(詳細については、 データベース接続のチューニング - コネクション プールの設定  を参照して下さい)。

    JIRA 設定ツール 「詳細」 タブ オプション

    dbconfig.xml の要素

    アイドル状態にテストpool-test-while-idle
    追い出し実行間の時間time-between-eviction-runs-millis
    追い出し可能な最小限のアイドル時間min-evictable-idle-time-millis
  6. 編集した dbconfig.xml ファイルを保存します (Jira 設定ツールを使用している場合は [保存] ボタンをクリックします)。

  7. Jira (もしくは、Jira を実行している Tomcat) を再起動します。

Note that if you continue to have problems with connections closing, you may need to set the time-between-eviction-runs-millis parameter to a lower value or as a last resort, set test-on-borrow to true. For more information about the test-on-borrow, see Tuning database connections - connection pool settings section.

バリデーション クエリおよびタイムアウトの決定

各データベースの種類におけるバリデーションクエリは、それぞれ若干異なる SQL 構文の条件を有しています。バリデーションクエリは、プールからコネクションが回収される度に実行されるため、可能な限りシンプルなものが臨まれます。バ リデーションクエリのタイムアウトは、MySQL 向けにおいてのみ設定します。

各バリデーションクエリに推奨されるバリデーションクエリを以下に紹介します。:

データベース タイプ

バリデーション クエリ

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

MySQL

select 1

3

Microsoft SQL Server

select 1

N/A

Oracle

select 1 from dual

N/A 

PostgreSQL

select version();

N/A

 If the Validation query timeout is used on any database other than MySQL, it will cause significant problems with the Jira instance.

結果

これで、データベースのコネクション プールにおける全てのコネクションが完全に失われても、Jira、あるいは Jira を実行中のアプリケーション サーバを再起動させることなくコネクションを回復できます。

パフォーマンス上の留意点

  • このオプションを設定すると、パフォーマンスに影響が及びますが、クエリそのものは素早く実行されるため、パフォーマンス上の全体的な影響は最低 限に保たれます。更に、このクエリが実行されるのは、コネクションが成立した場合においてのみとなります。よって、リクエストの間ずっとコネクションが保 たれると、クエリは一回のリクエストに対して一度のみしか発生しません。
  • 大規模な Jira インストールを実行している場合、この操作によるパフォーマンスへの影響を評価してから実装することをおすすめします。
最終更新日 2022 年 7 月 28 日

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

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