Jira アプリケーションでバックグラウンドでの再インデックスを "現在" 行えない問題を修正する方法
症状
Jira アプリケーションのインデックス機能にアクセスしようとすると、次のように "インデックス ファイルが足りないか破損しているため、現在 Jira はバックグラウンドのインデックス再作成を実行できません。" エラーが表示される。
atlassian-jira.log
に次のメッセージが表示される。
2012-12-27 10:04:04,083 http-bio-8082-exec-3 WARN captain.planet 604x750x1 1kx4mae 172.22.2.187 /secure/admin/IndexAdmin.jspa [jira.issue.index.IndexConsistencyUtils] Index consistency check failed for index 'Comment': expectedCount=140803; actualCount=122964
原因
この問題はコメントと作業ログによって発生します。解決手順は同じですが、worklog
テーブルにも影響します。
データベースのコメントの数が、インデックス フォルダに作成された Lucene ドキュメントの数と一致しません。これは、Jira アプリケーションの課題が GUI ではなくデータベースから直接削除されたために発生した、孤立したコメント レコードによって起こることが確認されています。このエラーは「Jira のアップグレード後にインデックスが無効化されている」で説明されているものと似ています。
ソリューション
データベースの変更を行う場合は必ず事前にバックアップを取得してください。可能な場合は、まずステージング サーバーで SQL コマンドの変更、挿入、更新、または削除を行うようにします。
次の SQL を使用し、孤立したコメント/作業ログを特定します。
SELECT * FROM jiraaction WHERE issueid NOT IN (SELECT id FROM jiraissue); SELECT * FROM worklog WHERE issueid NOT IN (SELECT id FROM jiraissue);
インスタンスに大量の課題がある場合、このクエリの実行に時間がかかることがあります。この問題が発生した場合は id の値を制限して複数のクエリを実行し、クエリのパフォーマンスを改善できます。次のようなクエリを実行します。
SELECT * FROM jiraaction WHERE issueid NOT IN (SELECT id FROM jiraissue) HAVING id between 0 and 100000; SELECT * FROM worklog WHERE issueid NOT IN (SELECT id FROM jiraissue) HAVING id between 0 and 100000;
Postgres を使用している場合、次のクエリを実行します。
SELECT * FROM jiraaction WHERE issueid not in (SELECT id FROM jiraissue) group by id HAVING jiraaction.id between 0 and 100000; SELECT * FROM worklog WHERE issueid not in (SELECT id FROM jiraissue) group by id HAVING worklog.id between 0 and 100000;
このクエリは最初の 100,000 件の課題に対して実行されます。完了後、"between 100000 and 200000" の値を変更できます。これを繰り返してすべての課題を確認します。
- アプリケーションを停止します。
削除可能な場合、次のように削除します。
DELETE FROM jiraaction WHERE issueid NOT IN (SELECT id FROM jiraissue); DELETE FROM worklog WHERE issueid NOT IN (SELECT id FROM jiraissue);
This will not fix all orphaned records in the JIRA application database for an issue deleted from
jiraissue
, only comments/worklogs.(Oracle のみ) 次の SQL を実行して変更をコミットします。
COMMIT;
- アプリケーションを開始します。
- 再インデックス ページにアクセスし、問題が修正されたことを確認します。
Jira アプリケーションで使用している DBMS に応じ、上述の SQL を変更する必要がある場合があります。