Od kilku lat niemal codziennie mam do czynienia z WordPressem i bazami danych. W tym czasie, już kilka razy zdarzyło mi się, że przez zapełnienie bazy, WordPress zaczynał kaprysić i rzucał dziwnymi komunikatami zupełnie nie wskazującymi na taki problem.

Jeżeli potrzebujesz wskazówek, dzięki którym szybko odchudzisz swoją bazę danych WordPress, to ten wpis jest dla Ciebie!

Pamiętam, że tworzyłem kiedyś prosty sklep internetowy oparty o WooCommerce. W pewnym momencie, osoba, której powierzone zostało czuwanie nad sklepem skontaktowała się ze mną i pytała, czy zmieniłem jej hasło, bo nie może się zalogować. Oczywiście nic nie zmieniałem. Wtedy jeszcze nie wiedziałem, o co chodzi… Osobie grzecznie poradziłem, że jeśli nie pamięta hasła,  to niech spróbuje wbudowanej w WordPress opcji odzyskiwania hasła. Po to tam to jest.

Niestety odzyskiwanie hasła nie pomogło. Próba jego odzyskiwania kończyła się tak, że użytkownik dostawał informację o wysłaniu na e-mail nowego hasła, które jednak nigdy nie nadeszło.

Gdy dostałem informację o niedziałającej opcji odzyskiwania hasła ani ja (Super Admin), ani nikt inny nie mógł się na stronie zalogować. Pomyślałem, że może strona została zhakowana ale działała i wyglądała zupełnie normalnie. Zalogowałem się do phpMyAdmin aby sprawdzić, co jest nie tak z tymi hasłami. Dopiero przy próbie nadania nowego hasła PMA wyrzucił błąd, że baza jest pełna.

Okazało się, że WooCommerce się „przytkał” i nie czyścił starych rekordów z zapisanymi danymi o sesjach z koszykami użytkowników, przez co niemożliwe było dodawanie nowych i aktualizowanie istniejących rekordów. W efekcie nie działał system logowania i odzyskiwanie hasła. Taki dziwny problem.

Po wyczyszczeniu rekordów ze starymi koszykami wszystko wróciło do normy (z tego co pamiętam WooCommerce posiadał jeszcze wtedy specjalną opcję, dzięki której można było wyczyścić te dane ręcznie). Nigdy później sytuacja się nie powtórzyła ale wnioski zostały wyciągnięte. 🙂

W tym wpisie postanowiłem dodać dwie przydatne kwerendy MySQL, które od czasu do czasu można uruchamiać w celu oczyszczenia rekordów typu _transient i rewizji do wpisów.

Usuwamy rekordy tymczasowe z bazy danych WordPress

Rekordy typu transient, to po prostu tymczasowa pamięć podręczna wykorzystywana przez niektóre pluginy, jak np. WooCommerce, do przechowywania informacji. WordPress Transient API możemy porównać do WP Options API, z tą różnicą, że w tych pierwszych ustawiany jest „czas przeterminowania danych”, po którym zostaną automatycznie usunięte.

Tymczasowe rekordy typu transient przechowywane są w tabeli wp_options i mogą być bezpiecznie usunięte, kosztem pozbawienia użytkowników, w zależności od zainstalowanych pluginów, zapisanych koszyków, czy osobistych preferencji wyświetlania strony.

Przykładowo, na wpadmin.pl posiadam plugin, który wykorzystuje ten rodzaj pamięci do zapisywania informacji o nakładanych blokadach na IP po pewnej ilości nieudanych prób logowania. Tego typu rekordy tymczasowe możemy rozpoznać po nazwie rozpoczynającej się od site_transient_. Tak to wygląda na moim przykładzie:

_site_transient

Zapytanie do bazy MySQL czyszczące pliki typu transient wygląda następująco:

DELETE FROM `wpa_options` WHERE `option_name` LIKE ('%\_transient\_%');

Wywołanie kwerendy skutkuje wyczyszczeniem wszystkich rekordów typu transient z tabeli wp_options do poziomu 214 rekordów. Wynik jest zależny od zainstalowanych pluginów i konfiguracji.

Usuwanie rewizji wpisów

Drugą pozycją na mojej liście czyszczenia bazy danych WordPress są rekordy-rewizje. Rekordy tego typu są tworzone za każdym razem, gdy poprawiasz artykuł i wciskasz niebieski guzik Zaktualizuj. Kiedy to robisz, WordPress tworzy rewizję wcześniejszej wersji i publikuje najnowszą wersję.

Jak usunąć wszystkie rewizje postów? Można to zrobić wywołując odpowiednią komendę w phpMyAdmin:

DELETE FROM `wpa_posts` WHERE post_type LIKE 'revision';

Oczywiście nie zawsze chcemy usuwać wszystkie rewizje - możemy najpierw je przejrzeć używając do tego kodu:

SELECT * FROM `wpa_posts` WHERE post_type LIKE 'revision';

 

Pamiętaj o wykonaniu kopii zapasowej bazy danych przed wykorzystaniem którejkolwiek z zamieszczonych tutaj porad.

Inne źródła olbrzymich baz danych

Rewizje postów i rekordy typu transient to najprostsze i najbezpieczniejsze do usunięcia dane, które w zasadzie możemy uruchamiać cyklicznie, bez zastanowienia. O ile tych pierwszych będzie najwyżej kilkadziesiąt, tak w przypadku drugich w zależności od ruchu i konfiguracji strony może pojawiać się nawet kilkadziesiąt tysięcy rekordów tymczasowych, które już mogą "trochę ważyć".

Innym źródłem obszernej bazy danych mogą być dane o użytkownikach zapisywane przez plugin do liczenia statystyk na stronie. Jeżeli korzystasz z takiego pluginu, to warto co pewien czas kontrolować ilość zapisywanych przez plugin danych, gdyż potrafią one bardzo szybko zapełnić przestrzeń bazy.

Innym rodzajem pluginów, które potrafią całkiem sporo przechowywać w bazie, są niektóre pluginy społecznościowe. Szczególnie kombajny, które zapisują szereg informacji o tym, kto, kiedy, przy pomocy którego medium udostępnił wpis. Jeżeli prowadzicie aktywną stronę, to zauważycie że rekordy z licznikami udostępnień mogą całkiem sporo "ważyć".

Olbrzymie bazy danych są utrapieniem wszystkich administratorów. Wszystkie operacje na takiej bazie trwają dłużej i są bardziej zasobożerne. A jak sprawdzić, czy baza potrzebuje czyszczenia? Najlepiej zalogować się do phpMyAdmini i na własne oczy sprawdzić rozmiary tabel i ilości rekordów.

 

Wpis otagowano:

Pomogłem? Dodaj coś od siebie! Skomentuj ten wpis:

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *