Po roku lub dwóch aktywnego działania baza danych PrestaShop rośnie i zaczyna spowalniać zapytania. To normalne, ale zaniedbane może prowadzić do wyraźnego spowolnienia sklepu nawet na dobrej infrastrukturze.
Slow Query Log
Pierwsza diagnoza to włączenie slow query log w MySQL lub MariaDB. Ustawiasz próg, np. zapytania trwające ponad jedną sekundę, i baza zaczyna je logować. Po kilku godzinach zbierania masz listę najbardziej problematycznych zapytań. To punkt startowy do optymalizacji.
EXPLAIN dla wolnych zapytań
Polecenie EXPLAIN przed zapytaniem SQL pokazuje jak baza planuje je wykonać: czy używa indeksu, ile rekordów skanuje. Zapytanie skanujące milion rekordów bez indeksu w tabeli zamówień będzie wolne niezależnie od sprzętu. Dodanie właściwego indeksu może skrócić czas wykonania z sekund do milisekund.
Rosnące tabele logów
PrestaShop prowadzi własne logi w tabelach takich jak ps_log, ps_connections i ps_guest. W sklepie z ruchem te tabele rosną szybko i mogą zawierać miliony rekordów. Regularne czyszczenie starych wpisów, starszych niż kilka miesięcy, wyraźnie poprawia wydajność zapytań na całej bazie.
Tabela ps_cart i ps_specific_price
Tabela ps_cart przechowuje porzucone koszyki. Bez regularnego czyszczenia rośnie przez lata. Tabela ps_specific_price przy aktywnym używaniu promocji może mieć dziesiątki tysięcy wpisów. Warto regularnie usuwać wpisy, które wygasły.
OPTIMIZE TABLE
Polecenie OPTIMIZE TABLE defragmentuje tabele InnoDB i odzyskuje nieużywane miejsce po usuniętych rekordach. Nie trzeba go uruchamiać codziennie, ale raz na kilka miesięcy po dużym czyszczeniu danych daje wymierny efekt.
Redis jako warstwa cache
Redis lub Memcached jako cache obiektowy PS redukuje liczbę zapytań do bazy. Często odczytywane dane, czyli konfiguracja sklepu, tłumaczenia i ustawienia modułów, są trzymane w pamięci RAM zamiast być pobierane z MySQL przy każdym żądaniu.