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.