Come risolvere lo stato dell'indicizzatore "sospeso" (n in backlog)


12

Uno degli indicizzatori che sono configurati per essere aggiornati nei tempi previsti è bloccato nello stato "sospeso" e non viene più aggiornato.

Uscita di 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 |
| ...                        |                  |           |                               |                     |
+----------------------------+------------------+-----------+-------------------------------+---------------------+

Altri mostrano idle (0 in backlog)e l'ora corrente nella colonna "Pianificazione aggiornata", quindi la pianificazione dell'indicizzatore generalmente funziona.

Come posso risolvere questo?

Risposte:


8

Ho scoperto che lo stato è impostato \Magento\Framework\Mview\View::suspend()e rimosso in \Magento\Framework\Mview\View::resume().

Questi metodi vengono chiamati solo \Magento\Indexer\Model\Indexer::reindexAll()per sospendere l'indicizzazione pianificata prima di un reindicizzazione completa forzata e per riprenderla in seguito o se si verifica un'eccezione.

Ma se il processo viene terminato senza eccezioni, ad es. Ucciso, segfault o addirittura si verifica un errore irreversibile irreversibile, lo stato rimane "sospeso" e non vi è alcun modo per riprenderlo.

Soluzione: assicurarsi che non vi sia realmente un reindex completo in esecuzione, quindi aggiornare lo stato tramite SQL.

Troverai tutti gli stati con:

select * from mview_state;

e aggiornalo in questo modo:

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

Sei riuscito a trovare una soluzione a prova completa?
— Vivek Kumar,

1

Non è necessario modificare il database per farlo, è possibile fare lo stesso reimpostando e indicizzatori e quindi reindicizzandoli nuovamente utilizzando i seguenti comandi;

php bin/magento indexer:reset

php bin/magento indexer:reindex

1
Questa è stata la prima cosa che ho provato, ma ripristina solo lo stato (ovvero "in corso"), non lo stato mview
— Fabian Schmengler,

Non sono sicuro che l'attivazione di un reindex completo avrebbe funzionato, ma anche in questo caso, vorrei evitarlo
— Fabian Schmengler,

Ho avuto lo stesso problema nel mio caso in cui il processo è stato sospeso, quindi ha funzionato per me. Era magento 2.1.x però.
— Vivek Kumar,

Grazie, sperimenterò un po 'per saperne di più :)
— Fabian Schmengler,

1
ho scoperto che il reset, indicizzatore php bin / magento: reset, non ha cambiato il flag sospeso, ma lo ha fatto in modo da poter reindicizzare correttamente e che a sua volta ha cambiato il flag di nuovo in idle. suggerisco di usare il: php bin / magento indexer: reset suggerito sopra.
— jrossi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.