

様々な状況下で、インデックス再作成のタイミングでインデックス作成のプロセスがロックされてしまうことがあります。これにより、ロックされたインデックスタイプのインデックスを再作成することができなくなり、様々な不都合が生じることがあります。その結果、そのインデックスタイプは常にスキップされてしまいます。
例えば、Stockインデックスタイプがロックされている場合、次のコマンドを実行してすべてのデータのインデックスを再作成すると、次のようになります:
php bin/magento indexer:reindex
以下の出力では、Stockのプロセスがスキップされていることがわかります。
Design Config Grid index has been rebuilt successfully in 00:00:04
Customer Grid index has been rebuilt successfully in 00:00:06
Category Products index has been rebuilt successfully in 00:00:02
Product Categories index has been rebuilt successfully in 00:00:00
Product Price index has been rebuilt successfully in 00:00:01
Product EAV index has been rebuilt successfully in 00:00:00
Catalog Search index has been rebuilt successfully in 00:00:04
Stock index is locked by another reindex process. Skipping.
Catalog Rule Product index has been rebuilt successfully in 00:00:00
Catalog Product Rule index has been rebuilt successfully in 00:00:00
このBackend Indexモジュールを使えば、バックエンドでの再インデックスが無料でできます。
そこで本日は、「reindex処理のロックを解除する方法」をご紹介します。インデックスが他のreindexプロセスによってロックされている場合 手順を飛ばして説明します。
ステップ1:インデックスタイプ情報の取得
まず最初に、Magento 2 に存在するすべてのインデックスタイプの情報/リストを収集する必要があります。 そのためには、以下のコマンドを使用します:
php bin/magento indexer:info
上記のコマンドを実行すると、以下のような結果が表示されます:
design_config_grid Design Config Grid
customer_grid Customer Grid
catalog_category_product Category Products
catalog_product_category Product Categories
catalog_product_price Product Price
catalog_product_attribute Product EAV
catalogsearch_fulltext Catalog Search
cataloginventory_stock Stock
catalogrule_rule Catalog Rule Product
catalogrule_product Catalog Product Rule
出力結果から、インデックスタイプ「Stock」
のコードが cataloginventory_stock
であることがわかります。
ステップ2:インデックスタイプの状態を確認する
このステップでは、次のコマンドを使用して、すべてのインデックスタイプのステータスを確認する必要があります。
php bin/magento indexer:status
このコマンドを実行すると、インデックスタイプの「Processing status Stock」が「Locked」であることがわかります。詳細については、この出力をご覧ください。
Design Config Grid: Ready
Customer Grid: Ready
Category Products: Ready
Product Categories: Ready
Product Price: Ready
Product EAV: Ready
Catalog Search: Ready
Stock: Processing
Catalog Rule Product: Ready
Catalog Product Rule: Ready
ステップ3:インデックスタイプのリセット
この問題を解決するには、ロックされているインデックスタイプをリセットするという素晴らしい方法があります。この例では、「Processing」の状態になっています。このコマンドを実行すると、すべてのインデックスタイプがリセットされます。
php bin/magento indexer:reset
そして、複数のインデックスタイプをリセットするには、次のように実行します:
php bin/magento indexer:reset IndexType1 IndexType2 IndexType3
このケースでは、cataloginventory_stock
という1つのインデックスタイプだけがロックされています。したがって、ロックを解除するには、このコマンドを実行する必要があります。
php bin/magento indexer:reset cataloginventory_stock
このコマンドを実行すると、以下のような結果が得られます:
Stock indexer has been invalidated.
ステップ4:インデックスタイプの再作成
このステップでは、インデクサの状態をもう一度確認する必要があります。そのためには、次のコマンドを実行します。
php bin/magento indexer:status
出力結果は以下のようになります。
Design Config Grid: Ready
Customer Grid: Ready
Category Products: Ready
Product Categories: Ready
Product Price: Ready
Product EAV: Ready
Catalog Search: Ready
Stock: Reindex required
Catalog Rule Product: Ready
Catalog Product Rule: Ready
出力結果を見ると、株価指数タイプのロックが解除されていることがわかります。また、ステータスがProcessing
からReindex required
に変更されています。
これで、次のコマンドを使用して、Stock index typeのインデックスを再作成することができます。
php bin/magento indexer:reindex cataloginventory_stock
最終的な結果を受け取ることができます。
Stock index has been rebuilt successfully in 00:00:04
結論
結論として、インデックスのロックを解除することは、別のインデックス処理をスキップさせたくない場合に必要です。この詳細な説明を読めば、Magento 2 でロックされた reindexing process をコマンドラインを使って簡単に解除できるようになることを願っています。