Optymalizacja bazy danych WordPress — czyszczenie, indeksy i wydajność zapytań SQL

Opublikowano: 20 marca 2026 · Autor: Marcin Szewczyk-Wilgan

Baza danych MySQL to serce każdej strony WordPress — przechowuje treści, ustawienia, użytkowników, zamówienia i konfigurację wtyczek. Z czasem baza rośnie: rewizje postów, wygasłe transienty, osierocone meta dane po usuniętych wtyczkach, logi i sesje. Strona, która kiedyś ładowała się w sekundę, zaczyna potrzebować trzech — nie dlatego, że jest więcej treści, lecz dlatego, że baza jest zaśmiecona danymi, których nikt nie potrzebuje. W tym artykule wyjaśniamy, skąd biorą się problemy wydajnościowe bazy danych WordPress, jak je diagnozować i jak bezpiecznie optymalizować bazę — od czyszczenia po indeksy i konfigurację MySQL.

Skąd biorą się problemy z bazą danych WordPress

WordPress przechowuje ogromną ilość danych w kilku kluczowych tabelach. Problem pojawia się, gdy te tabele rosną niekontrolowanie:

wp_postmetaNajwiększa tabela w większości instalacji WordPress. Przechowuje wszystkie meta dane postów, stron i produktów WooCommerce w formacie klucz-wartość (EAV). Sklep z 5000 produktami i wariantami może mieć miliony wierszy. Osierocone meta dane po usuniętych wtyczkach pozostają na zawsze — chyba że je wyczyścisz.
wp_options (autoload)Tabela wp_options zawiera ustawienia WordPressa i wtyczek. Opcje z flagą autoload=yes są ładowane przy KAŻDYM żądaniu HTTP — nawet jeśli nie są potrzebne. Wtyczki często zapisują duże dane z autoload=yes. Gdy łączny rozmiar autoload przekracza 1 MB, każde żądanie zaczyna się od ładowania megabajta zbędnych danych.
Rewizje postówWordPress domyślnie zapisuje nieograniczoną liczbę rewizji każdego posta. Artykuł edytowany 50 razy ma 50 rewizji w wp_posts — plus powiązane meta dane w wp_postmeta. Przy 500 postach to 25 000 niepotrzebnych wierszy. Ustaw WP_POST_REVISIONS w wp-config.php (zalecamy 3–5).
TransientyTransienty to tymczasowe dane cache przechowywane w wp_options. Powinny się automatycznie usuwać po wygaśnięciu — ale często tego nie robią. Tysiące wygasłych transientów zaśmiecają wp_options i spowalniają zapytania. Bez object cache (Redis) transienty są jedynym mechanizmem cache — i jednocześnie problemem.
WooCommerceSesje klientów, logi, wygasłe webhooks, dane Analytics — WooCommerce generuje ogromną ilość danych operacyjnych. Tabela wp_wc_sessions rośnie szybko przy dużym ruchu. Logi WooCommerce starsze niż 30 dni nie mają wartości operacyjnej i powinny być czyszczone.

Bezpieczne czyszczenie bazy danych

Optymalizacja bazy danych zaczyna się od usunięcia zbędnych danych. Każdą operację poprzedź pełną kopią zapasową bazy — mysqldump jest Twoim przyjacielem.

Wygasłe transientyWP-CLI: wp transient delete --expired. Usuwa transienty, których czas ważności minął. Bezpieczna operacja — transienty zostaną odtworzone przy następnym żądaniu. Przy object cache (Redis) transienty są w pamięci, nie w bazie — problem znika.
RewizjeWP-CLI: wp post delete $(wp post list --post_type='revision' --format=ids) — usuwa wszystkie rewizje. Dodaj define('WP_POST_REVISIONS', 5); do wp-config.php, aby ograniczyć przyszłe rewizje do 5 na post. Rewizje mają wartość tylko przez kilka dni od edycji.
Osierocone meta daneMeta dane w wp_postmeta, wp_commentmeta i wp_usermeta, które odnoszą się do nieistniejących obiektów (usunięte posty, komentarze, użytkownicy). Zapytanie SQL: DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts). Zawsze testuj na staging przed wykonaniem na produkcji.
Autoload w wp_optionsDiagnoza: SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload = 'yes'; — wynik powyżej 1 MB sygnalizuje problem. Zidentyfikuj największe wpisy i zmień autoload na 'no' dla opcji, które nie są potrzebne przy każdym żądaniu. Testuj po każdej zmianie.
OPTIMIZE TABLEPo masowym usuwaniu danych tabele InnoDB mogą mieć „dziury" — zajmują więcej miejsca niż potrzebują. OPTIMIZE TABLE wp_postmeta; defragmentuje tabelę i odzyskuje przestrzeń. Wykonuj raz na kwartał. Operacja blokuje tabelę — wykonuj w godzinach niskiego ruchu.

Indeksy i konfiguracja MySQL

Czyszczenie danych to połowa sukcesu. Druga połowa to optymalizacja sposobu, w jaki MySQL wykonuje zapytania:

Indeksy w wp_postmetaDomyślny indeks na meta_key w wp_postmeta jest typu KEY, nie UNIQUE — i obejmuje tylko pierwsze 191 znaków. Dla sklepów WooCommerce z milionami wierszy — dodatkowy indeks na (post_id, meta_key) lub (meta_key, meta_value) może przyspieszyć zapytania kilkukrotnie. Analizuj wolne zapytania z EXPLAIN.
innodb_buffer_pool_sizeNajważniejszy parametr konfiguracji MySQL dla WordPressa. Określa, ile pamięci RAM MySQL rezerwuje na buforowanie danych i indeksów. Zalecane: 50–70% dostępnej pamięci RAM serwera bazy danych. Domyślna wartość (128 MB) jest niewystarczająca dla każdej instalacji WordPress z ruchem.
Slow query logWłącz logowanie wolnych zapytań (slow_query_log = 1, long_query_time = 1). Analizuj logi — znajdź zapytania trwające ponad 1 sekundę, zidentyfikuj brakujące indeksy, zoptymalizuj lub przepisz problematyczne zapytania. To podstawowe narzędzie diagnostyczne.
Query MonitorWtyczka Query Monitor pokazuje wszystkie zapytania SQL wykonywane na danej stronie, ich czas i źródło (która wtyczka je generuje). Nieocenione narzędzie diagnostyczne — pozwala zidentyfikować wtyczki generujące nadmiarowe zapytania. Używaj na staging, nie na produkcji.

Podsumowanie

Optymalizacja bazy danych WordPress to nie jednorazowa operacja — to element regularnej konserwacji. Czyszczenie transientów i rewizji, audyt autoload, optymalizacja tabel, monitorowanie wolnych zapytań — te działania utrzymują bazę danych w kondycji i zapobiegają stopniowej degradacji wydajności. Dla sklepów WooCommerce z tysiącami produktów i zamówień — optymalizacja bazy danych to jedna z najskuteczniejszych inwestycji w prędkość.

W WebOptimo optymalizacja bazy danych jest standardowym elementem planów opieki WordPress. Regularnie czyścimy, indeksujemy i monitorujemy bazy danych naszych klientów. Jeśli Twoja strona zwalnia — skontaktuj się z nami lub sprawdź naszą ofertę optymalizacji WordPress.

Najczęstsze pytania o bazę danych WordPress

Rewizje postów, wygasłe transienty, osierocone meta dane, logi WooCommerce, sesje użytkowników, spam komentarzy i przeładowana tabela wp_options z opcjami autoload.

Przechowuje meta dane postów i produktów w formacie klucz-wartość. Przy tysiącach produktów ma miliony wierszy. Brak indeksów i osierocone rekordy dramatycznie spowalniają zapytania.

Zawsze zaczynaj od pełnej kopii zapasowej. Usuń wygasłe transienty, ogranicz rewizje, wyczyść spam, usuń osierocone meta dane, zoptymalizuj tabele. Używaj WP-CLI lub zaufanych narzędzi.

Opcje z autoload=yes ładują się przy każdym żądaniu HTTP. Gdy ich łączny rozmiar przekracza 1 MB, każde żądanie zaczyna się od ładowania megabajta zbędnych danych z bazy.

Czyszczenie transientów i rewizji: miesięcznie. OPTIMIZE TABLE: kwartalnie. Audyt autoload: po zmianach wtyczek. WooCommerce: czyszczenie sesji i logów co tydzień.

Porozmawiajmy o wydajności Twojej strony WordPress

Zdiagnozujemy i zoptymalizujemy bazę danych Twojej witryny. Bez zobowiązań — konkretna propozycja po analizie.

Telefon

+48 608 271 665

Pn–Pt, 8:00–16:00

E-mail

kontakt@weboptimo.pl

Odpowiadamy w ciągu 24h

Firma

WebOptimo

NIP: 6391758393