PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

Magento 2 reindeksowanie trwa godzinami – deadlock MySQL i brakujące indeksy

by Henryk Tews / niedziela, 21 czerwca 2026 / Opublikowano w Magento / Adobe Commerce

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:reindex trwa 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.

About Henryk Tews

Co możesz przeczytać następne

Strategy w PHP – i jak Magento 2 używa go w cenach
Wzorzec Proxy – lazy loading, kontrola dostępu, caching, Proxy w Magento 2
Magento 2 Varnish cache nie działa – hit rate 0% i błędna konfiguracja VCL
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}