Panel admina zawieszał się przy próbie otwarcia listy zamówień. Timeout po 30 sekundach. Baza danych zawierała 500 000 zamówień zgromadzonych przez 5 lat. Czas naprawy: 3 godziny.
Objawy
- Otwarcie Sales > Orders kończy się timeoutem przeglądarki
- MySQL slow log: zapytanie COUNT na tabeli
sales_ordertrwa 28 sekund - Problem narastał stopniowo przez ostatnie miesiące
- Eksport zamówień do CSV niemożliwy
Rozwiązanie
# 1. Archiwizacja starych zamówień bin/magento sales:archive --active # 2. Włącz archiwum zamówień w konfiguracji # Stores > Configuration > Sales > Sales > Orders, Invoices, Shipments, Credit Memos Archiving # Enable Archiving: Yes # Archive Orders Purchased: 90 days ago and earlier # 3. Dodaj indeks do tabeli zamówień
-- Brakujące indeksy na tabelach zamówień
ALTER TABLE sales_order
ADD INDEX idx_created_status (created_at, status),
ADD INDEX idx_customer_email (customer_email);
ALTER TABLE sales_order_grid
ADD INDEX idx_created_at (created_at);
-- Sprawdź czy tabela nie jest zfragmentowana
ANALYZE TABLE sales_order;
OPTIMIZE TABLE sales_order_grid;
# 4. Wyczyść przestarzałe dane quote bin/magento sales:quote:cleanup # Wynik: grid zamówień ładuje się w 0.8s zamiast timeout
Wnioski
Sklepy działające kilka lat gromadzą setki tysięcy rekordów. Archiwizacja zamówień i regularne OPTIMIZE TABLE to podstawa utrzymania wydajności. Planuj archiwizację zanim osiągniesz punkt krytyczny.
