Magento 2 Checkout Slowdown: Zabójca wydajności – tabela quote
Twój sklep Magento 2 ma cichego zabójcę wydajności. Mieszka on w Twojej bazie danych.
Tabele quote oraz quote_item rosną za każdym razem, gdy klient dodaje produkt do koszyka. Jeśli nie dokona zakupu, rekord pozostaje w bazie. Z upływem miesięcy tabele te osiągają miliony wierszy.
Widziałem kiedyś sklep z 15 milionami wierszy w tabeli quote. Prędkość procesu zakupowego spadła z 1,2 sekundy do 8 sekund. Sprzedawca nie miał pojęcia, dlaczego tak się dzieje. Frontend był cache'owany, więc wszystko wyglądało dobrze, dopóki proces zakupowy nie kończył się błędem.
Duże tabele quote powodują następujące problemy:
- Powolne ładowanie strony koszyka z powodu ciężkich złączeń (joins) w bazie danych.
- Powolne wywołania AJAX podczas procesu zakupowego (dla kosztów wysyłki i podsumowań).
- Wolniejsze tworzenie zamówień w panelu administracyjnym.
- Dłuższy czas tworzenia kopii zapasowych i odzyskiwania bazy danych.
- Wysokie obciążenie pamięci PHP-FPM.
Jak to naprawić:
Zmierz skalę problemu Sprawdź liczbę wierszy i rozmiary tabel. Poszukaj liczby rekordów
stale_inactive. Są to porzucone koszyki starsze niż 30 dni. Nie pełnią żadnej funkcji, a jedynie spowalniają zapytania.Archiwizuj przed usunięciem Nie usuwaj milionów wierszy naraz. To spowoduje zablokowanie tabel i awarię bazy danych. Najpierw utwórz tabele archiwalne i przenieś do nich nieaktywne rekordy
quotestarsze niż 90 dni.Stosuj usuwanie partiami Usuwaj wiersze w małych paczkach po 10 000. Zapobiega to długotrwałemu blokowaniu tabel. Zawsze najpierw usuwaj tabele potomne, aby zachować relacje kluczy obcych. Kolejność powinna być następująca:
- quote_item_option
- quote_address_item
- quote_shipping_rate
- quote_payment
- quote_address
- quote_item
- quote
Optymalizuj i indeksuj Uruchom
OPTIMIZE TABLE, aby odzyskać miejsce na dysku. Dodaj indeksy złożone, aby pomóc bazie danych szybciej znajdować aktywne rekordyquote. Na przykład dodaj indeks na(is_active, updated_at).Zautomatyzuj czyszczenie Użyj polecenia Magento CLI:
bin/magento sales:cleanQuotes. Skonfiguruj zadanie cron, aby uruchamiało je raz w tygodniu w okresach niskiego natężenia ruchu.
Pro Tip: Koszyki gości (guest carts) powodują największy wzrost objętości danych. Skróć czas życia koszyka gościa do 7 dni w konfiguracji. Dzięki temu Twoja baza danych pozostanie lekka, nie szkodząc przy tym realnym klientom.
Jeden z klientów dzięki tym krokom skrócił czas ładowania procesu zakupowego z 6,5 s do 1,4 s. Odzyskał również 9 GB miejsca w bazie danych.
Dbaj o to, aby tabele quote były małe, a Twoje współczynniki konwersji wysokie.
