Jira 8.10 以降へのアップグレード後にバックグラウンドの再インデックスに時間がかかる
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
サーバー*製品のサポートは 2024 年 2 月 15 日に終了しました。サーバー製品を利用している場合は、アトラシアンのサーバー製品のサポート終了のお知らせページにて移行オプションをご確認ください。
*Fisheye および Crucible は除く
If you're experiencing other problems with background reindex, such as issue creation hanging or slow and user requests timing out, you might be being affected by JRASERVER-72045 - IndexException: Wait attempt timed out - waited 30000 milliseconds caused by background indexing tasks.
問題
Jira 8.10.0 以降へのアップグレード後 (LTS リリースである 8.13.0 を含む)、バックグラウンドの再インデックス処理が過去のバージョンのときと比べて遅くなった (0-20 %)。この追加のコストは、インデックスの一貫性の向上によって発生している。以前の Jira バージョン (<8.10.0) では、バックグラウンドのインデックスは (ローカル インデックスで) 同時に発生しているユーザーのデータ更新アクションをオーバーライドすることができた。(推奨される) 前面でのインデックス作成は影響を受けない。
診断
背景は、Jira 8.10 で導入されたインデックスのバージョニングです。これは、Jira 8.12 以降で提供される DBR 機能に備えたものです。DBR 機能は主に Data Center 用ですが、インデックスのバージョニングは Jira Server でも一貫したインデックスを保持するために利用されています。
新しいバックグラウンドの再インデックス プロセスは Jira 8.8.1 での機能とは異なり、すべてのインデックス更新でインデックス内のエンティティのバージョンを確認します。これにより、インデックスの同時更新があったときにインデックスの一貫性が保たれます。これまでは、これらのエンティティを変更する同時ユーザー アクションがあった場合、古いデータによって (インデックス内で) 上書きされる可能性がありました。このため、バックグラウンドの再インデックス プロセスの終わりに、一貫性がない可能性のあるインデックスを修正しようとするタスクが実行されていました。
しかしながら Jira 8.10 で導入されたバックグラウンドの再インデックスでは、他のユーザー アクションによるインデックス変更と同様、インデックスの更新時に条件つき更新を行うようになりました。このため、一貫性のあるインデックスがこれまでよりも少し高いコストで保持されるようになります。この確認は各項目に対して発生し、この期間はインデックスが一貫してディスクにフラッシュされます。
当社のベンチマークでは、新しいバックグラウンドの再インデックス プロセスは以前の Jira バージョンと比べると 1 - 20% 低速である可能性があることがわかりました。60,000 件の課題で各課題が ~15 コメントを持つ状態で実施したテストの結果を以降でご確認ください。課題ごと所要時間は環境ごとの課題の数にかかわらず一貫しているように見えます (つまり、データベースに大量の課題がある場合も影響を受けない)。
Jira バージョン | バックグラウンドのインデックス時間 |
---|---|
8.8.1 | 7 ミリ秒/課題 |
8.13.0 | 16 ミリ秒/課題 |
原因
バックグラウンドの再インデックスの所要時間が 1-20% 増えている場合、それは新しいインデックス バージョン機能で期待された挙動です。これよりも大きな違いが発生している場合、パフォーマンスのボトルネックを特定するために詳細な調査が必要になる可能性があります。
根本原因 #1
当社の確認では、ディスク パフォーマンスが乏しいインスタンスではバックグラウンドの再インデックス プロセスが大きな影響を受けることがわかっています。この場合、アップグレード前の時点でディスクのスループット不足を示す他の症状が出ている可能性が高いです (Jira の課題検索が低速など)。ご利用のインスタンスのディスク パフォーマンスは、当社の「Jira サーバーのパフォーマンスのトラブルシューティングのためにディスクのアクセス速度をテストする」ドキュメントを利用して確認できます。
トラブルシューティングに利用できるよう、確認に役立つ新しいログを Jira に導入しています。バックグラウンドの再インデックスの完了後に $JIRA-HOME/log/atlassian-jira.log
ログ ファイルを検索し、次のログ トレースを探すことができます。
2020-10-21 16:33:20,057+0000 index-writer-stats-ISSUE-9-0 INFO rbaldasso 761x67822x1 sfdsi932 127.0.0.1 /secure/admin/jira/IndexReIndex!reindex.jspa [c.a.jira.index.WriterWithStats] [index-writer-stat
s] ISSUE : total stats: {"addDocumentsMillis":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{}},"deleteDocumentsMillis":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{}},"updateDocumentsM
illis":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{}},"updateDocumentConditionallyMillis":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{}},"updateDocumentsWithVersionMillis":{"count":
25884,"min":24,"max":5674,"sum":13765800,"avg":531,"distributionCounter":{"10":0,"100":1,"500":19264,"1000":3838,"5000":2780,"10000":1,"30000":0,"60000":0}},"updateDocumentsWithVersionSize":{"count":25884,"min":1,"max":1,"sum
":25884,"avg":1,"distributionCounter":{"1":25884,"10":0,"100":0,"1000":0,"10000":0}},"replaceDocumentsWithVersionMillis":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"10":0,"100":0,"500":0,"1000":0,"5000"
:0,"10000":0,"30000":0,"60000":0}},"replaceDocumentsWithVersionSize":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"1":0,"10":0,"100":0,"1000":0,"10000":0}},"optimizeMillis":{"count":1,"min":0,"max":0,"sum
":0,"avg":0,"distributionCounter":{}},"closeMillis":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{}},"commitMillis":{"count":460,"min":916,"max":4329,"sum":970038,"avg":2108,"distributionCounter":{}}}, ind
ex writer version cache stats: {"put":25884,"get":25885,"getFound":0,"clear":0}
ディスクのスループット不足についての本調査では、Jira でインデックス ファイルの更新に時間がかかりすぎていることがわかりました。
"updateDocumentsWithVersionMillis": {
"count": 1036,
"min": 24,
"max": 2439,
"sum": 579572,
"avg": 559,
"distributionCounter": {
"10": 0,
"100": 1,
"500": 729,
"1000": 190,
"5000": 116,
"10000": 0,
"30000": 0,
"60000": 0
}
}
updateDocumentsWithVersionMillis は、単一の課題 (単一のドキュメント) について、Lucene インデックスの更新時間を測定します。通常、平均で 10 ミリ秒未満、99 % が 100 ミリ秒未満であることが期待されます。
バックグラウンドの再インデックス プロセス中にスレッド ダンプを集め、プロセスを遅延させている可能性のあるスタックしたスレッドを探すこともできます。
ソリューション
根本原因 #1
- SSD ディスクなどの高速なストレージに移行することでディスクのスループットを改善してください。