Sklep z 50 000 produktów – pełny reindeks trwał 6 godzin i często kończył się błędem deadlock. Ceny i dostępność produktów aktualizowały się z opóźnieniem. Czas naprawy: 1 dzień.
Objawy
bin/magento indexer:reindextrwa powyżej 4 godzin- MySQL error log:
Deadlock found when trying to get lock; try restarting transaction - Indeksery w statusie „Processing” przez wiele godzin
- Ceny i stany magazynowe nieaktualne dla klientów
Diagnoza
# Sprawdź status indekserów bin/magento indexer:status # Sprawdź czy indeksery są uruchomione równolegle (deadlock risk) bin/magento indexer:show-mode # Sprawdź brakujące indeksy MySQL SELECT table_name, index_name, column_name FROM information_schema.statistics WHERE table_schema = 'magento' AND table_name LIKE 'catalog_%' ORDER BY table_name, index_name; # Sprawdź slow query log dla zapytań indeksera grep 'catalogrule\|catalog_product_index' /var/log/mysql/slow.log | head -20
Przyczyna
Dwa indeksery uruchamiały się równolegle i blokowały te same tabele powodując deadlocki. Dodatkowo brakujące indeksy MySQL na tabelach EAV spowalniały zapytania 10-krotnie.
Rozwiązanie
# Przełącz na tryb Update by Schedule (zamiast Update on Save)
bin/magento indexer:set-mode schedule catalog_product_price
bin/magento indexer:set-mode schedule catalogsearch_fulltext
bin/magento indexer:set-mode schedule cataloginventory_stock
# Uruchamiaj indeksery sekwencyjnie przez cron zamiast równolegle
# app/etc/config.php - wyłącz parallel reindex:
# 'system' => ['default' => ['dev' => ['grid' => ['async_indexing' => '0']]]]
# Dodaj brakujące indeksy MySQL (przykład dla EAV value tables)
ALTER TABLE catalog_product_entity_varchar
ADD INDEX idx_attribute_store (attribute_id, store_id, value(50));
ALTER TABLE catalog_product_entity_decimal
ADD INDEX idx_attribute_store (attribute_id, store_id);
# Zwiększ innodb_lock_wait_timeout
# /etc/mysql/conf.d/magento.cnf:
# innodb_lock_wait_timeout = 120
# innodb_deadlock_detect = ON
Wynik
Czas pełnego reindeksu: z 6 godzin do 18 minut. Deadlocki: 0. Indeksery w trybie Schedule aktualizują dane co minutę bez blokowania sklepu.
