legacy-knowledge-base
公開されました Jul. 2, 2025

再インデックス処理の進行状況を確認し、ブロックされたBackgroundTaskとLockレコードを削除する方法

written-by

Tibor Lipusz

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

インデックスの再作成には時間がかかり、何も起こらないように見える場合があります。 コントロールパネルのバーにインデックスの再作成アイコンが表示されるか、パーセンテージが変更されないだけです。

 

環境

  • DXP 7.3
  • DXP 7.2
  • DXP 7.1
  • DXP 7.0

解決

BACKGROUNDTASK テーブルを確認する

 taskExecutorClassName 列に ReindexPortalBackgroundTaskExecutor または ReindexSingleIndexerBackgroundTaskExecutorが含まれている BackgroundTaskテーブルのレコードを検索します。 

  • status0のレコードは、まだキューに入っていない新規タスクを参照しています。 通常、再インデックスではこのようなエントリーはありません。
  • status1のレコードは、それらがまだ進行中であることを意味します。
  • status2のレコードは、 失敗した 再インデックス操作を参照しています。createDate および modifiedDate フィールドの日付が、インデックスの再作成で問題が発生した時期に近いかどうかを調べます。
  • status3のレコードは、成功した再インデックスタスクを参照しています。
  • status4のレコードは、それらが キューに入っていることを意味しますが、ピックアップされない可能性があるため、レコードを削除して、インデックスの再作成を再度呼び出すことができます。
  • status5のレコードは、 キャンセルされたジョブを参照しています。

BackgroundTaskを削除するには、LiferayのAPIを利用することをお勧めします。

  1. レコードの backgroundTaskId を取得します。
  2. スクリプトコンソールからGroovyスクリプトから削除操作を行います。
import com.liferay.portal.background.task.service.BackgroundTaskLocalServiceUtil;

BackgroundTaskLocalServiceUtil.deleteBackgroundTask(backgroundTaskId);

データベースからレコードを手動で削除する場合は、コントロール パネルのサーバー管理からデータベース キャッシュをクリアしてください。

Lock_ テーブルを確認する

未解放の lock が再インデックス操作を妨げている場合があります。 ReindexPortalBackgroundTaskExecutor*key_としてレコードをクエリすることができます。 実行中のバックグラウンドタスクが無い場合でも(前のセクションを思い出してください)、問題のレコードを削除して、コントロールパネルのサーバー管理からデータベースキャッシュをクリアしてみてください。

重要: ブロックされたBackgroundTasksの削除から開始しない場合、関連するLockレコードを削除してもタスクが継続される可能性があります。

lockを削除するには、LiferayのAPIを利用することをお勧めします。

  1. レコードの lockId を取得します。
  2. スクリプトコンソールからGroovyスクリプトから削除操作を行います。
import com.liferay.portal.lock.service.LockLocalServiceUtil;

LockLocalServiceUtil.deleteLock(lockId);

データベースからレコードを手動で削除する場合は、コントロール パネルの サーバー管理からデータベース キャッシュをクリアしてください。

ロギングを有効にする

コントロールパネル > サーバー管理 > ログレベルに移動します。 これらの2つのクラスを追加し、 DEBUG に設定します。

com.liferay.portal.search.internal.background.task.ReindexStatusMessageSenderImpl

このログは、コンテンツをインデックス化したときにメッセージを出力します。

com.liferay.portal.background.task.internal.messaging.RemoveOnCompletionBackgroundTaskStatusMessageListener

このログは、インデックスジョブがまだ進行中かどうか、完了したかどうかなど、インデックスジョブの状態を知らせてくれます。

また、 INFO レベルで以下のクラスを追加します。

com.liferay.portal.search.internal.SearchEngineInitializer

再インデックスが正常に完了したかどうかの確認

  • 再インデックス操作の時間枠からDXPサーバログのインデックス作成に関連した例外はありません。
  • BackgroundTask テーブルにステータス1または4のレコードがありません。
did-this-article-resolve-your-issue

legacy-knowledge-base