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

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

このページの内容

お困りですか?

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

コミュニティに質問

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

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

これを行うには、Jira ホーム ディレクトリdbconfig.xml ファイルで、オプションの <validation-query/> 要素を指定する必要があります。これは、データベース コネクション プール内のコネクションのバリデーション クエリです。詳しくは、以下の手順を参照してください。

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

  1. Jira (または Jira を実行中の Tomcat インストール) をシャットダウンします。
  2. Jira ホームディレクトリdbconfig.xml ファイルを編集するか、 Jira 設定ツール の [詳細] タブを使用して、関連する設定を行います。
  3. お使いのデータベース向けのバリデーションクエリを設定します:
    • dbconfig.xml ファイルを編集する際は、以下の MySQL 用の例にあるように、使用するタイプのデータベースに適したバリデーション クエリを持つ <validation-query/> 要素を追加します (詳細については、以下の バリデーション クエリの決定 を参照してください)。

      <?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>
      
    • Jira 設定ツールを利用する場合、[詳細] タブから [バリデーション クエリ] チェックボックスを選択して、使用するデータベースのタイプに適したバリデーション クエリを入力します (詳細については、以降の「バリデーション クエリの決定」を参照してください)。
  4. バリデーションクエリのタイムアウトを指定します。この値は、データベースコネクションが切断されたものとシステムが判断するまで、システムが待機しなくてはならない適当な時間 (秒単位) となります:
    • dbconfig.xml ファイルを編集する際は、<validation-query-timeout/> 要素を適切な時間の長さ(秒単位)で追加します。(warning) これは、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 インストール) を再起動します。

(info) 注意: コネクションの切断に関する問題が引き続き発生する場合、time-between-eviction-runs-millis パラメーターを低い値に設定するか、test-on-borrowtrue に設定する必要がある場合があります。test-on-borrow の詳細については、「データベース接続のチューニング - コネクション プールの設定」セクションを参照してください。

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

各データベースの種類におけるバリデーションクエリは、それぞれ若干異なる 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

(warning) MySQL 以外のデータベースでバリデーション クエリ タイムアウトを使用すると、Jira インスタンスに重大な問題が生じます。

結果

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

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

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

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

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