Przejdź do treści
PrestaShop

Optymalizacja MySQL przy dużym wolumenie danych w PrestaShop

3 września 2025 7 min czytania

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.