Как определить статус индексатора «приостановлено» (n в отставании)

12

Один из индексаторов, настроенных для обновления по расписанию, заблокирован в состоянии «приостановлено» и больше не обновляется.

Выход из bin/magento indexer:status

+----------------------------+------------------+-----------+-------------------------------+---------------------+
| Title                      | Status           | Update On | Schedule Status               | Schedule Updated    |
+----------------------------+------------------+-----------+-------------------------------+---------------------+
| ...                        |                  |           |                               |                     |
| IntegerNet_Solr            | Reindex required | Schedule  | suspended (101028 in backlog) | 2018-09-24 15:28:44 |
| ...                        |                  |           |                               |                     |
+----------------------------+------------------+-----------+-------------------------------+---------------------+

Другие показывают idle (0 in backlog)и текущее время в столбце «Расписание обновлено», поэтому расписание индексатора обычно работает.

Как я могу решить это?

Фабиан Шменглер
источник

Ответы:

8

Я узнал, что статус установлен \Magento\Framework\Mview\View::suspend()и удален в \Magento\Framework\Mview\View::resume().

Эти методы вызываются только \Magento\Indexer\Model\Indexer::reindexAll()для приостановки запланированной индексации перед принудительной полной переиндексацией и для возобновления ее после или в случае возникновения исключения.

Но если процесс завершается без исключения, например, уничтожается, подвергается сегрегации или даже сталкивается с неисправимой фатальной ошибкой, статус остается «приостановленным» и средств для его возобновления нет.

Решение: убедитесь, что полное переиндексация не запущено, а затем обновите статус с помощью SQL.

Вы найдете все статусы с:

select * from mview_state;

и обновите это так:

update mview_state set status='idle' where view_id='integernet_solr';
Фабиан Шменглер
источник
Вам удалось найти полное доказательство решения?
Вивек Кумар
1

Вам не нужно редактировать базу данных, чтобы сделать это, вы можете сделать то же самое путем сброса и индексирования, а затем переиндексировать их снова, используя следующие команды;

php bin/magento indexer:reset

php bin/magento indexer:reindex
Вивек Кумар
источник
1
Это было первое, что я попробовал, но он только сбрасывает статус (то есть «в процессе»), а не состояние mview
Фабиан Шменглер,
Я не уверен, что запуск полного реиндекса снова сработал бы, но даже если бы это было так, я бы хотел этого избежать
Фабиан Шменглер,
У меня была такая же проблема в моем случае, когда процесс был приостановлен, выше работал для меня тогда. Это был magento 2.1.x хотя.
Вивек Кумар
Спасибо, я собираюсь немного поэкспериментировать, чтобы узнать больше :)
Фабиан Шменглер,
1
я обнаружил, что сброс, php bin / magento indexer: reset, не изменил флаг приостановки, но сделал его таким образом, чтобы я мог правильно переиндексировать, и это, в свою очередь, вернул флаг в состояние ожидания. Я предлагаю использовать: php bin / magento indexer: сброс, предложенный выше.
Джросси