Jak oczyścić bazę WordPressa i zmniejszyć jej rozmiar

Z WordPressa korzystam od ponad 2 lat, w miarę systematycznie publikuję wpisy od roku. Ostatnio postanowiłem sprawdzić, jaki jest rozmiar bazy danych mysql, na której działa moja strona. Zalogowałem się do phpmyadmin i zobaczyłem, że największa tabela bazy – wp_posts ma ponad 2MB. Wydało mi się to trochę sporo, tym bardziej, że miałem wtedy nieco ponad 40 opublikowanych wpisów. Zacząłem przeglądać tą tabelę i zauważyłem, że prócz tekstu wpisów, są w niej również przechowywane informacje o załącznikach, np. zdjęciach. Moją uwagę przykuły wpisy, które występowały nawet 40 razy. Miały różne ID, ale ten sam post_title. Analizując dalej, różne były również pola post_status  – inherit, publish, draft czy future, podobnie pole post_type – revision, attachment, post.

Wystarczyła chwila poszukiwań w internecie i wszystko stało się jasne – każde zapisanie pisanego postu i autozapisanie jest umieszczone jako osobny rekord w bazie. I tak można mieć 50 wersji jednego wpisu, utworzonych podczas jego tworzenia. Znalazłem też zapytanie SQL, które usuwa z bazy “wersje robocze” wpisów. Po jego wykonaniu, rozmiar tabeli zmniejszył się ponad 10-krotnie! Oczywiście z bazy nie zniknęły potrzebne rekordy z opublikowanymi wpisami, nieopublikowanymi szkicami i informacjami o załącznikach.

Poniżej kilka screenów z przeprowadzonej optymalizacji bazy, która nie była czyszczona przez miesiąc. Najpierw zrzut z rozmiarem tabeli przed odśmiecaniem:

Jak widać – ponad 700kB.

Następnie w phpmyadmin należy wykonać kopię bazy danych – tak dla bezpieczeństwa, ja korzystam z ustawień zalecanych przez wsparcie WordPressa. Przechodzimy do zakładki Eksport, w polu Eksport wybieramy opcję “Zaznacz wszystkie” co spowoduje podświetlenie wszystkich tabel, reszta ustawień jak na zrzucie:

Wciśnięcie [Wykonaj] spowoduje ściągnięcie przez przeglądarkę kopii bazy. Wykonanie kopii jest niezbędne i pozwoli nam przywrócić wszystkie dane w razie ich przypadkowego usunięcia.

Teraz czas na wykonanie zapytania SQL, które usunie niepotrzebne rekordy. w phpmyadmin przechodzimy do zakładki “SQL” i w polu Zapytanie SQL dla bazy danych wpisujemy:

DELETE FROM wp_posts WHERE post_status = 'inherit' AND post_type != 'attachment';

Zapytanie spowoduje usunięcie rekordów z tabeli wp_posts, które w polu post_status będą miały wpis inherit, a pole post_type będzie miało każdy innym wpis od attachment. Tak to wyglądało u mnie:

Po wciśnięciu [Wykonaj] u mnie pojawiło się okno przeglądarki z pytaniem, czy na pewno ma zostać wykonana operacja, po kliknięciu [OK], wyświetliło się podsumowanie – u mnie zostało usuniętych 55 rekordów:

A teraz najciekawsze, czyli o ile zmniejszyła się tabela wp_posts:

W moim przypadku było to ponad 300kB – czyli prawie o połowę, po miesiącu, w czasie którego opublikowałem tylko 5 wpisów. Na koniec warto jeszcze sprawdzić, czy wszystko działa, a ze strony nie poznikały wpisy czy zdjęcia.

Cały proces można sobie zautomatyzować – są do tego celu przeznaczone specjalne wtyczki, można też napisać sobie skrypt, który będzie uruchamiał cron, np. co tydzień. Ja wykonuję jednak to ręcznie od czasu do czasu.

Wojtek

Zobacz komentarze

  • Bardzo przydatny wpis. Co prawda prowadzę stronę opartą na WordPressie od niedawna ale z pewnością w chwili wolnej zerknę ile zajmuje moja baza danych oraz co się w niej znajduje.

  • Bardzo pomocny artykuł. Wykonałem właśnie czyszczenie mojej bazy danych według Twojego opisu i moim oczom i ku mojemu zdziwieniu ukazała się zdecydowana różnica, tzn. wielkość tabeli wp_posts z ponad 5 MB zmniejszyła się do 737.2 KB. Oczywiście w razie "W" wykonałem kopię bazy danych.

  • Sytemem rewizji wpisów w WP można sterować za pomocą wpisu do pliku wp_config:

    define('WP_POST_REVISIONS', false); - wyłączenie rewizji (każdy post będzie zapisywany raz i po uaktualnieniu stara zawartość będzie nadpisywana nową)

    lub
    define('WP_POST_REVISIONS', 3); - pozostawienie trzech ostatnich rewizji (liczbę można zmieniać)

    • Dziękuję za bardzo przydatne informacje. Szkoda, że tych opcji nie można zmienić z poziomu ustawień w kokpicie.

Ostatnie posty

Nieudana naprawa i udany przeszczep – Boombox Philips

Mamy w domu dość wiekowy (2012) Boombox Philips, model AZ385/12 używany przez dzieci głównie jako…

15 godzin temu

Tani moduł IoT z kamerką ESP32 CAM – pierwsze uruchomienie

Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…

7 miesięcy temu

Aktualizacja oprogramowania w stacji lutowniczej AiXun T3A

Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…

8 miesięcy temu

Programator USB AVR ISP z Arduino Nano

Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…

8 miesięcy temu

Tester elementów elektronicznych na atmega – aktualizacja firmware’u

W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…

9 miesięcy temu

Wzmacniacz słuchawkowy Lovely Cube – popularny klon Lehmanna

Dziś tematyka audio, a nawet audiofilska. Uznany wzmacniacz słuchawkowy Lehmann Black Cube Linear o dość…

9 miesięcy temu