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

症状

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

 

環境

  • 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のレコードがありません。
この記事は役に立ちましたか?
4人中4人がこの記事が役に立ったと言っています