Bagaimana mengatasi status pengindeks “ditangguhkan” (n di backlog)

12

Salah satu pengindeks yang dikonfigurasi untuk diperbarui sesuai jadwal dikunci dalam status "ditangguhkan" dan tidak diperbarui lagi.

Output dari 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 |
| ...                        |                  |           |                               |                     |
+----------------------------+------------------+-----------+-------------------------------+---------------------+

Lainnya menunjukkan idle (0 in backlog)dan waktu saat ini di kolom "Jadwalkan Diperbarui", sehingga jadwal pengindeks umumnya berfungsi.

Bagaimana saya bisa memecahkan masalah ini?

Fabian Schmengler
sumber

Jawaban:

8

Saya menemukan, bahwa status diatur \Magento\Framework\Mview\View::suspend()dan dihapus pada \Magento\Framework\Mview\View::resume().

Metode-metode ini hanya dipanggil \Magento\Indexer\Model\Indexer::reindexAll()untuk menunda pengindeksan yang dijadwalkan sebelum pengindeksan ulang paksa paksa dan untuk melanjutkannya setelah itu atau jika pengecualian terjadi.

Tetapi jika proses dihentikan tanpa kecuali, misalnya terbunuh, tersegel atau bahkan mengalami kesalahan fatal yang tidak dapat dipulihkan, status tetap "ditangguhkan" dan tidak ada cara untuk melanjutkannya.

Solusi: pastikan, benar-benar tidak ada pengindeksan ulang penuh berjalan, kemudian perbarui status melalui SQL.

Anda akan menemukan semua status dengan:

select * from mview_state;

dan perbarui seperti ini:

update mview_state set status='idle' where view_id='integernet_solr';
Fabian Schmengler
sumber
Apakah Anda berhasil menemukan solusi bukti lengkap?
Vivek Kumar
1

Anda tidak perlu mengedit database untuk melakukannya, Anda dapat melakukan hal yang sama dengan mengatur ulang dan mengindeks dan kemudian mengindeks kembali mereka dengan menggunakan perintah berikut;

php bin/magento indexer:reset

php bin/magento indexer:reindex
Vivek Kumar
sumber
1
Itu adalah hal pertama yang saya coba, tetapi hanya me-reset status (yaitu "sedang berlangsung"), bukan negara mview
Fabian Schmengler
Saya tidak yakin apakah memicu reindex penuh lagi akan berhasil, tetapi bahkan jika demikian, saya ingin menghindarinya
Fabian Schmengler
Saya memiliki masalah yang sama dalam kasus saya di mana prosesnya ditangguhkan, di atas bekerja untuk saya saat itu. Itu adalah magento 2.1.x.
Vivek Kumar
Terima kasih, saya akan bereksperimen sedikit untuk mencari tahu lebih lanjut :)
Fabian Schmengler
1
saya menemukan bahwa reset, php bin / magento indexer: reset, tidak mengubah flag yang ditangguhkan, tetapi tidak membuatnya sehingga saya dapat mengindeks ulang dengan benar dan pada gilirannya mengubah bendera kembali ke siaga. Saya sarankan menggunakan: pengindeks php bin / magento: reset disarankan di atas.
jrossi