Optymalizacja bazy danych WordPress bez wtyczek – poradnik SQL

Optymalizacja bazy danych WordPress bez wtyczek – poradnik SQL

Po kilku latach działania strony WordPress baza danych przybiera na wadze. Posty, transienty, komentarze i metadane z dawno usuniętych wtyczek – to wszystko zalega w tabelach i spowalnia zapytania. Większość wtyczek do optymalizacji działa powierzchownie, a niektóre potrafią nawet uszkodzić dane. Znacznie bezpieczniej i skuteczniej jest zrobić to ręcznie przez phpMyAdmin lub WP-CLI.

Backup przed wszystkim

Zanim wykonasz jakiekolwiek zapytanie na produkcyjnej bazie, zrób pełny backup. W phpMyAdmin to opcja „Eksportuj”, w WP-CLI wystarczy:

wp db export backup-$(date +%Y%m%d).sql

Czyszczenie rewizji i autorecordów

Mając kopię zapasową możesz spokojnie eksperymentować. Jeśli coś pójdzie nie tak, przywrócisz bazę w minutę. Nigdy nie ufaj SQLowi, widziałem zbyt wiele sytuacji, gdy „to tylko proste zapytanie” narobiło wielkiego zamieszania – administrator pomylił nazwę tabeli albo zapomniał o klauzuli WHERE.

WordPress domyślnie zapisuje każdą wersję edytowanego wpisu. Po kilku latach intensywnej pracy redakcyjnej tabela _posts potrafi urosnąć. Sprawdź, ile takich rewizji masz w bazie:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';

Jeśli liczba przekracza kilka tysięcy, warto je usunąć. Najpierw dodaj do wp-config.php ograniczenie liczby przechowywanych rewizji:

define('WP_POST_REVISIONS', 3);

Potem usuń stare rewizje zapytaniem:

DELETE FROM wp_posts WHERE post_type = 'revision';

Analogicznie wyczyszczę autosave’y (automatyczne zapisy robocze):

DELETE FROM wp_posts WHERE post_status = 'auto-draft';

Po usunięciu postów warto wyczyścić osierocone metadane. WordPress nie zawsze usuwa wpisy z _postmeta, gdy post znika:

DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;

To zapytanie znajduje wszystkie rekordy, które wskazują na nieistniejące posty i je usuwa. Na dużych serwisach potrafi to zwolnić nawet kilkaset megabajtów.

Porządki w transients

Transients to mechanizm cache’owania wbudowany w WordPress. Problem w tym, że wiele wtyczek tworzy transients z datą ważności, ale WordPress nie usuwa ich automatycznie – robi to dopiero przy próbie odczytu. Efekt? Tabela _options puchnie od wygasłych transients.

Sprawdź, ile masz podobnych rekordów znajdziesz w bazie:

SELECT COUNT(*) FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();

Usunięcie przeterminowanych transients to dwa zapytania – jedno dla timeoutów, drugie dla wartości:

DELETE FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();
DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%'
AND option_name NOT IN (
  SELECT REPLACE(option_name, '_transient_timeout_', '_transient_')
  FROM wp_options
  WHERE option_name LIKE '_transient_timeout_%'
);

Drugie zapytanie jest bardziej skomplikowane, bo musi znaleźć transients bez odpowiadającego im timeoutu. Na stronach z dużą liczbą wtyczek cachujących to zapytanie potrafi usunąć tysiące zbędnych wpisów.

Optymalizacja tabel po czyszczeniu

Po usunięciu danych MySQL nie zwraca od razu miejsca na dysku. Tabele pozostają niepotrzebnie napompowane pustymi rekordami. Trzeba uruchomić optymalizację:

OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options;

Możesz też zoptymalizować wszystkie tabele na raz przez phpMyAdmin – zaznacz wszystkie i wybierz „Optymalizuj tabelę” z menu rozwijanego. Na dużych bazach operacja może potrwać kilka minut i zablokuje tabele do zapisu, więc weź to pod uwagę podczas planowania prac.

Alternatywnie przez WP-CLI:

wp db optimize

Podsumowanie

Ręczna optymalizacja bazy WordPress to kilkanaście minut pracy, która potrafi przynieść wymierne efekty – szybsze zapytania, mniejsze backupy i lżejszy serwer. Najważniejsze sprawa – backup przed każdą ingerencją i testować zapytania najpierw z COUNT(*), żeby zobaczyć, ile rekordów zostanie usuniętych. Takie czyszczenie warto robić co najmniej raz na kwartał, szczególnie na stronach z dużą ilością wpisów. Wtyczki do optymalizacji mają swoje zastosowanie, ale podstawowe porządki lepiej załatwić samodzielnie – masz wtedy pełną kontrolę i widzisz dokładnie, co się dzieje z danymi.

Potrzebujesz pomocy ze swoją stroną?

Sprawdź ofertę wsparcia swojej strony w wygodnej subskrypcji.

Sprawdź ofertę

Pełną ofertę moich usług znajdziesz na stronie www.zakoduje.com.pl

ź