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ć:

  1. 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.

  2. 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 quote starsze niż 90 dni.

  3. 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
  1. Optymalizuj i indeksuj Uruchom OPTIMIZE TABLE, aby odzyskać miejsce na dysku. Dodaj indeksy złożone, aby pomóc bazie danych szybciej znajdować aktywne rekordy quote. Na przykład dodaj indeks na (is_active, updated_at).

  2. 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.

Source: https://dev.to/magevanta/magento-2-quote-table-optimization-scaling-checkout-with-millions-of-abandoned-carts-4pmp