Jak rozwiązać status indeksu „zawieszony” (n w zaległościach)


12

Jeden z indeksatorów skonfigurowanych do aktualizacji zgodnie z harmonogramem jest zablokowany w stanie „zawieszony” i nie jest już aktualizowany.

Wyjście z 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 |
| ...                        |                  |           |                               |                     |
+----------------------------+------------------+-----------+-------------------------------+---------------------+

Inne pokazują idle (0 in backlog)aktualną godzinę w kolumnie „Aktualizacja harmonogramu”, więc harmonogram indeksatora ogólnie działa.

Jak mogę to rozwiązać?

Odpowiedzi:


8

Dowiedziałem się, że status jest ustawiony \Magento\Framework\Mview\View::suspend()i usunięty w \Magento\Framework\Mview\View::resume().

Te metody są wywoływane tylko w \Magento\Indexer\Model\Indexer::reindexAll()celu zawieszenia zaplanowanego indeksowania przed wymuszonym pełnym ponownym indeksowaniem i wznowienia go później lub w przypadku wystąpienia wyjątku.

Ale jeśli proces zostanie zakończony bez wyjątku, np. Zabity, segfaultowany lub nawet wystąpi niemożliwy do odzyskania błąd krytyczny, status pozostanie „zawieszony” i nie ma możliwości jego wznowienia.

Rozwiązanie: upewnij się, że naprawdę nie ma pełnego reindeksu, a następnie zaktualizuj status za pomocą SQL.

Znajdziesz wszystkie statusy z:

select * from mview_state;

i zaktualizuj go w następujący sposób:

update mview_state set status='idle' where view_id='integernet_solr';

Czy udało Ci się znaleźć pełne rozwiązanie sprawdzające?
Vivek Kumar

1

Aby to zrobić, nie musisz edytować bazy danych, możesz zrobić to samo, resetując i indeksując, a następnie ponownie je indeksując, używając następujących poleceń;

php bin/magento indexer:reset

php bin/magento indexer:reindex

1
To była pierwsza rzecz, której spróbowałem, ale resetuje ona tylko status (tj. „W toku”), a nie stan mview
Fabian Schmengler

Nie jestem pewien, czy ponowne uruchomienie pełnego reindeksu zadziałałoby, ale nawet jeśli tak, chciałbym tego uniknąć
Fabian Schmengler,

Miałem ten sam problem w moim przypadku, gdy proces został zawieszony, powyżej pracował dla mnie wtedy. To był jednak Magento 2.1.x.
Vivek Kumar

Dzięki, zamierzam trochę poeksperymentować, aby dowiedzieć się więcej :)
Fabian Schmengler

1
odkryłem, że reset, php bin / magento indexer: reset, nie zmienił zawieszonej flagi, ale sprawił, że mogłem poprawnie reindeksować, a to z kolei zmieniło flagę z powrotem w stan bezczynności. sugeruję użycie: php bin / magento indexer: reset sugerowany powyżej.
jrossi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.