Optymalizacja bazy danych WordPress, praktyczny przewodnik
Optymalizacja

Optymalizacja bazy danych WordPress, praktyczny przewodnik

Jeśli Twoja strona WordPress zwalnia bez wyraźnego powodu, a serwer nie jest przeciążony, przyczyna często leży w bazie danych. W tym przewodniku pokażę Ci krok po kroku, co rozrasta bazę, jak ją wyczyścić i jak zapobiec nawrotowi problemu.

Co rozrasta bazę danych WordPress

Baza danych rośnie niepostrzeżenie. WordPress i wtyczki zapisują w niej znacznie więcej, niż widać gołym okiem. Oto główni sprawcy:

  • Rewizje postów (revisions), WordPress domyślnie zapisuje każdą wersję roboczą wpisu. Przy intensywnym pisaniu jeden artykuł może mieć kilkadziesiąt rewizji, które zajmują miejsce w tabeli wp_posts.
  • Auto-drafty, automatyczne zapisywanie co kilka minut tworzy szkice, które zostają po opublikowaniu treści.
  • Transients, wtyczki i sam WordPress przechowują tymczasowe dane w tabeli wp_options. Wygasłe transients powinny być usuwane automatycznie, ale często nie są.
  • Spam i usunięte komentarze, komentarze w koszu i w folderze spam zajmują miejsce w tabeli wp_comments dopóki ich nie usuniesz na stałe.
  • Osierocone metadane, gdy usuniesz post lub produkt WooCommerce, powiązane wpisy w wp_postmeta często zostają jako sieroty.
  • Logi wtyczek, wtyczki do formularzy, WooCommerce, narzędzia do backupu czy SEO tworzą własne tabele logów, które potrafią urosnąć do setek megabajtów.

Problem autoload w wp_options, cichy zjadacz wydajności

Tabela wp_options to serce konfiguracji WordPressa. Każdy rekord ma kolumnę autoload. Jeśli ma wartość yes, WordPress ładuje go do pamięci przy każdym żądaniu strony, zanim jeszcze wyświetli choćby jeden element. Gdy sumaryczny rozmiar takich rekordów przekracza 1–2 MB, każde wejście na stronę zaczyna od kosztownego zapytania do bazy.

Aby sprawdzić, ile danych jest autoloadowanych, uruchom w phpMyAdmin lub WP-CLI:

SELECT SUM(LENGTH(option_value)) / 1024 / 1024 AS autoload_mb
FROM wp_options
WHERE autoload = 'yes';

Wynik powyżej 1 MB to sygnał do działania. Żeby zobaczyć, które rekordy są najcięższe:

SELECT option_name, LENGTH(option_value) AS size_bytes, autoload
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size_bytes DESC
LIMIT 20;

Narzędzia do optymalizacji bazy danych WordPress

phpMyAdmin

Dostępny w każdym panelu hostingowym (home.pl, cyber_Folks, LH.pl i innych). Pozwala uruchamiać własne zapytania SQL oraz wykonywać operację OPTIMIZE TABLE przez interfejs graficzny. Dobry do jednorazowych operacji i diagnostyki.

WP-CLI

Narzędzie linii poleceń dla WordPress, szybkie i precyzyjne. Przykłady poleceń:

# Usunięcie wszystkich rewizji
wp post delete $(wp post list --post_type=revision --format=ids) --force

# Usunięcie wygasłych transients
wp transient delete --expired --all

# Optymalizacja wszystkich tabel bazy
wp db optimize

Wtyczki, WP-Optimize i podobne

Jeśli nie masz dostępu do WP-CLI, wtyczki takie jak WP-Optimize czy Advanced Database Cleaner wykonają czyszczenie przez panel admina. Mają też opcję harmonogramu, możesz ustawić automatyczne sprzątanie co tydzień. Przed ich użyciem upewnij się, że wykonałeś backup.

Baza danych zwalnia Twoją stronę? Sprawdzę i naprawię to dziś.Bezpłatna diagnoza · reakcja w 1h
Zadzwoń, 577 020 415

Zapytania SQL do czyszczenia bazy, ostrożnie, zawsze z backupem

Przed wykonaniem poniższych zapytań zrób pełny backup bazy danych. Każde polecenie DELETE jest nieodwracalne.

-- Usunięcie rewizji postów
DELETE FROM wp_posts WHERE post_type = 'revision';

-- Usunięcie auto-draftów
DELETE FROM wp_posts WHERE post_status = 'auto-draft';

-- Usunięcie wygasłych transients
DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
  AND option_name LIKE '%timeout%'
  AND option_value < UNIX_TIMESTAMP(NOW());

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

-- Usunięcie spamu i odrzuconych komentarzy
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';

-- Usunięcie osieroconych metadanych postów
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;

Zamiast usuwać transients ręcznie, możesz skorzystać z poradnika o przyspieszaniu WordPress na home.pl, gdzie opisuję m.in. poprawną konfigurację cache'owania, który eliminuje konieczność przechowywania wielu transients.

Optymalizacja tabel, OPTIMIZE TABLE

Po masowym usuwaniu rekordów tabele mają luki w danych, tzw. fragmentację. Operacja OPTIMIZE TABLE defragmentuje tabele i odzyskuje miejsce na dysku. W phpMyAdmin zaznacz wszystkie tabele i kliknij „Optymalizuj tabelę". Przez WP-CLI:

wp db optimize

Na dużych tabelach (powyżej kilkuset MB) operacja może potrwać kilka minut i chwilowo zablokować tabelę, najlepiej uruchamiać ją poza godzinami szczytu.

Profilaktyka, jak ograniczyć rozrost bazy

Najlepsza optymalizacja to taka, której nie trzeba powtarzać co miesiąc. Dwa proste zabiegi znacząco spowalniają rozrost:

  • Limit rewizji w pliku wp-config.php. Dodaj linię:
define( 'WP_POST_REVISIONS', 3 );

Wartość 3 oznacza, że WordPress przechowa maksymalnie 3 ostatnie rewizje każdego wpisu. Możesz też użyć false, żeby wyłączyć rewizje całkowicie, choć odradzam, bo w razie pomyłki nie cofniesz zmian.

  • Regularne czyszczenie harmonogramem, WP-Optimize pozwala ustawić automatyczne czyszczenie co tydzień. Zajmuje to minutę konfiguracji i eliminuje ręczną pracę.
  • Audyt wtyczek, usuń wtyczki, których nie używasz. Każda zostawia tabele i wpisy w wp_options, nawet dezaktywowana.

Jeśli zależy Ci na kompleksowym przyspieszeniu strony, nie tylko bazy, ale też cache'u, obrazków i serwera, zajrzyj do mojej usługi optymalizacji WordPress. Baza danych to jeden z kilku elementów, które razem decydują o prędkości.

Dbanie o bazę to też element szerszej troski o stronę. Jeśli wolisz oddelegować to specjaliście, sprawdź moją ofertę monitoringu i obsługi WordPress, w ramach miesięcznej umowy regularnie czyszczę i monitoruję bazy klientów.

Kiedy lepiej zadzwonić do specjalisty

Własnoręczne czyszczenie jest jak najbardziej wykonalne, ale są sytuacje, w których warto powierzyć to komuś doświadczonemu. Jeśli baza ma powyżej kilku gigabajtów, strona działa na produkcji 24/7, nie masz pewności co do backupu, albo po czyszczeniu pojawiają się błędy, zadzwoń do mnie: 577 020 415. Wykonam pełny audyt bazy, zidentyfikuję problematyczne zapytania i przeprowadzę czyszczenie bezpiecznie, z backupem i weryfikacją po wszystkim. Reakcja w ciągu 1 godziny.

Baza danych spowalnia stronę, a sztuczki nie pomagają?

Bezpiecznie wyczyszczę i zoptymalizuję bazę WordPressa, z kopią zapasową i bez ryzyka utraty treści. Zadzwoń albo wyślij szybkie zgłoszenie, reakcja w 1h, bezpłatna wstępna diagnoza, rozliczam co 15 minut.

Zadzwoń, 577 020 415 Szybkie zgłoszenie
Powiązane tematy

Czytaj dalej

Zadzwoń Napisz