Stare sesje WooCommerce spowalniają sklep? Jak je wyczyścić

Spis treści
WooCommerce • baza danych • wydajność

WooCommerce zaczyna działać coraz wolniej, baza danych rośnie, backup trwa znacznie dłużej niż wcześniej, a w phpMyAdmin tabela wp_woocommerce_sessions ma dziesiątki lub setki tysięcy rekordów? Jedną z rzeczy, które warto wtedy sprawdzić, są zapisane sesje klientów i porzucone koszyki.

skuteczne SEO reklama PC
skuteczne SEO reklama mobile

Każdy aktywny koszyk potrzebuje miejsca, w którym WooCommerce zapamięta jego zawartość. Problem pojawia się wtedy, gdy wygasłe sesje nie są regularnie usuwane, WP-Cron nie działa prawidłowo albo sklep generuje wyjątkowo dużo sesji.

Nie zakładam jednak automatycznie, że duża tabela sesji jest jedyną przyczyną wolnego sklepu. Najpierw mierzę jej rozmiar, liczbę wygasłych rekordów oraz sprawdzam, czy mechanizm automatycznego czyszczenia faktycznie działa.

Najważniejsze informacje w skrócie
✓

WooCommerce przechowuje domyślne sesje klientów w tabeli woocommerce_sessions.

✓

Standardowa sesja koszyka wygasa po określonym czasie, a stare rekordy powinny być później usuwane.

✓

Duża liczba wygasłych sesji może niepotrzebnie zwiększać rozmiar bazy i obciążać jej obsługę.

✓

Narzędzie „Clear customer sessions” usuwa również aktualne koszyki klientów.

✓

Przy stale rosnącej tabeli sprawdzam przede wszystkim WP-Cron i źródło nowych sesji.

✓

Przed ręcznym usuwaniem rekordów SQL zawsze wykonuję kopię bazy danych.

Czym właściwie jest sesja WooCommerce?

Użytkownik odwiedza sklep, dodaje produkt do koszyka, przechodzi na inną podstronę, wraca po kilku minutach i nadal widzi swoje produkty.

WooCommerce musi gdzieś zapamiętać informacje związane z takim klientem.

01 Klient

Dodaje produkt do koszyka.

02 Sesja

WooCommerce zapisuje dane powiązane z użytkownikiem.

03 Kolejna strona

Sklep odtwarza zawartość koszyka.

04 Wygaśnięcie

Po określonym czasie sesja przestaje być potrzebna.

Samo tworzenie sesji nie jest więc problemem. To normalna część działania koszyka.

Problem zaczynam podejrzewać dopiero wtedy, gdy wygasłe rekordy zostają w bazie znacznie dłużej, niż powinny.

Gdzie WooCommerce przechowuje sesje klientów?

Przy standardowym mechanizmie WooCommerce znajdę tabelę o nazwie podobnej do:

wp_woocommerce_sessions

Prefiks wp_ jest tylko przykładem. Na konkretnej instalacji może wyglądać np.:

abc_woocommerce_sessions shop_woocommerce_sessions x7f_woocommerce_sessions

W tabeli interesują mnie przede wszystkim:

session_key Identyfikator sesji

Pozwala powiązać zapisane dane z konkretnym klientem.

session_value Dane sesji

Zawiera informacje potrzebne WooCommerce do odtworzenia stanu sesji.

session_expiry Termin ważności

Określa, kiedy dana sesja powinna zostać uznana za wygasłą.

Jak długo WooCommerce przechowuje koszyk klienta?

Standardowo sesja koszyka nie powinna żyć bez końca. WooCommerce wykorzystuje określony czas ważności, po którym produkty z porzuconego koszyka nie muszą już być odtwarzane dla tego użytkownika.

To ważny kompromis pomiędzy:

Dobry UX Klient wraca do koszyka

Nie musi ponownie szukać produktów, które dodał wcześniej.

Zbyt długa sesja Niepotrzebne rekordy

Bardzo długi czas życia może zwiększać liczbę przechowywanych sesji.

Nie skracam więc sesji do kilku minut tylko po to, żeby tabela była mała. Użytkownik, który wróci po chwili do sklepu, oczekuje przecież, że jego koszyk nadal będzie tam, gdzie go zostawił.

Kiedy tabela wp_woocommerce_sessions zaczyna być problemem?

Sama liczba rekordów nie wystarczy do diagnozy. Sklep z dużym ruchem naturalnie będzie generował więcej sesji niż mały sklep odwiedzany przez kilkadziesiąt osób dziennie.

Zwracam uwagę na kombinację kilku sygnałów:

  • tabela stale rośnie mimo upływu czasu,
  • duża część rekordów ma już przekroczony czas wygaśnięcia,
  • backup bazy staje się nieproporcjonalnie duży,
  • operacje na bazie danych trwają coraz dłużej,
  • WP-Cron nie wykonuje zaplanowanych zadań,
  • sklep generuje ogromną liczbę sesji od botów,
  • hosting regularnie zgłasza przeciążenia MySQL lub PHP.

Dopiero wtedy traktuję sesje jako jeden z konkretnych elementów do optymalizacji.

1. Sprawdź liczbę zapisanych sesji

Jeżeli mam dostęp do phpMyAdmin, Adminera albo konsoli MySQL, mogę najpierw tylko policzyć rekordy.

SELECT COUNT(*) FROM wp_woocommerce_sessions;

Pamiętaj o zmianie wp_ na prawdziwy prefiks tabel w danej instalacji.

Sam wynik:

125000

jeszcze nie oznacza problemu. Muszę sprawdzić, ile z tych sesji jest już wygasłych.

2. Policz tylko wygasłe sesje WooCommerce

Pole session_expiry przechowuje termin ważności sesji. Mogę więc porównać go z aktualnym czasem.

SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP();

Jeżeli tabela zawiera np. 150 000 rekordów, z czego 140 000 jest już wygasłych, mam znacznie mocniejszy sygnał, że mechanizm sprzątania nie działa prawidłowo.

Jeżeli natomiast prawie wszystkie sesje są nadal aktywne, sprawdzam ruch i źródło ich tworzenia.

3. Zanim cokolwiek usuniesz – zrób kopię bazy

To szczególnie ważne, jeśli planujesz wykonywać ręczne polecenia SQL.

Przed zmianami chcę mieć możliwość szybkiego odtworzenia poprzedniego stanu.

  • wykonuję pełny backup bazy danych,
  • sprawdzam, czy kopia rzeczywiście została utworzona,
  • zapisuję liczbę rekordów przed czyszczeniem,
  • większe operacje robię poza godzinami największej sprzedaży.

4. WooCommerce ma narzędzie „Clear customer sessions”

Znajdziesz je w:

WooCommerce → Status → Narzędzia → Wyczyść sesje klientów

To bardzo skuteczna opcja, ale trzeba dokładnie rozumieć, co robi.

To nie jest narzędzie do usuwania wyłącznie starych koszyków.

Wyczyszczenie wszystkich sesji usuwa również aktualne dane sesji klientów. Osoba, która właśnie miała produkty w koszyku, może po odświeżeniu zobaczyć pusty koszyk.

Dlatego używam tego rozwiązania głównie:

  • na środowisku testowym,
  • podczas świadomej operacji serwisowej,
  • gdy wiem, że mogę zaakceptować utratę aktywnych koszyków,
  • przy poważnie uszkodzonych lub niespójnych sesjach.

Nie klikam go co tydzień jako „optymalizację WooCommerce”.

5. Jak usunąć tylko wygasłe sesje z bazy?

Jeżeli sytuacja wymaga ręcznej interwencji, wolę kierować zapytanie wyłącznie do rekordów, których czas ważności już minął.

Przykładowo:

DELETE FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP() ORDER BY session_expiry LIMIT 5000;

Przy większej tabeli można wykonywać operację partiami, kontrolując obciążenie serwera.

Nie kopiuj zapytania bez sprawdzenia nazwy tabeli i wykonania backupu.

Na dużym sklepie masowy DELETE może być kosztowną operacją. Jeżeli tabela ma miliony rekordów, planuję czyszczenie z uwzględnieniem możliwości serwera i aktualnego ruchu.

Dlaczego usuwanie partiami jest bezpieczniejsze?

Jeżeli baza ma bardzo dużą liczbę wygasłych rekordów, pojedyncze polecenie:

DELETE FROM wp_woocommerce_sessions;

jest zdecydowanie zbyt agresywne.

Nie tylko usuwa aktywne koszyki, ale przy dużej tabeli może również wygenerować ciężką operację dla bazy.

Dlatego przy dużych zbiorach wolę działać porcjami i obserwować obciążenie MySQL.

6. Jeżeli stare sesje wracają – sprawdź WP-Cron

Ręczne wyczyszczenie tabeli usuwa objaw. Jeżeli po kilku tygodniach problem wraca, trzeba znaleźć przyczynę.

Jednym z pierwszych miejsc jest WordPress Cron.

W WooCommerce zadania w tle odpowiadają za wiele procesów:

  • czyszczenie danych tymczasowych,
  • procesy WooCommerce,
  • zadania Action Scheduler,
  • operacje różnych wtyczek.

Jeżeli WP-Cron został wyłączony w:

wp-config.php

sprawdzam, czy w zamian istnieje prawidłowy cron uruchamiany po stronie serwera.

Uwaga na DISABLE_WP_CRON

Często spotykam:

define( 'DISABLE_WP_CRON', true );

Sam ten wpis nie jest błędem.

Problem zaczyna się wtedy, gdy ktoś wyłączył standardowy mechanizm WordPressa, ale nie skonfigurował żadnego zadania cron na serwerze.

Problem WP-Cron wyłączony bez zamiennika

Zaplanowane zadania mogą przestać wykonywać się regularnie.

Poprawnie Cron systemowy

Serwer regularnie wywołuje WordPressa według ustalonego harmonogramu.

7. Boty mogą generować ogromną liczbę sesji

Czasami mechanizm czyszczenia działa poprawnie, ale nowych sesji powstaje po prostu bardzo dużo.

Powodem może być ruch automatyczny:

bot ↓ wejście do sklepu ↓ interakcja z koszykiem ↓ nowa sesja ↓ kolejne żądanie ↓ kolejna sesja

Jeżeli tysiące automatów regularnie wykonują akcje, które inicjują sesję WooCommerce, tabela może rosnąć znacznie szybciej niż wynikałoby to z realnej liczby klientów.

Wtedy czyszczenie bazy jest tylko częścią rozwiązania. Sprawdzam też:

  • logi dostępu serwera,
  • Cloudflare lub inny WAF,
  • nietypowe adresy URL,
  • liczbę sesji względem prawdziwego ruchu,
  • boty dodające produkty do koszyka,
  • fałszywe zamówienia i automatyczne checkouty.

8. WooCommerce może usuwać puste sesje gości wcześniej

W nowszych wersjach WooCommerce pojawiła się funkcja związana z czyszczeniem pustych sesji klientów.

Jeżeli jest dostępna w konkretnej wersji sklepu, znajdę ją w funkcjach WooCommerce jako:

Clear Customer Sessions When Empty

Jej idea jest prosta: jeśli niezalogowany użytkownik posiada sesję, ale nie ma w niej potrzebnych danych i koszyk jest pusty, WooCommerce może ją usunąć wcześniej.

Daje to również korzyść związaną z cache, ponieważ użytkownik bez niepotrzebnego cookie sesyjnego łatwiej może otrzymać publiczną wersję strony z page cache.

Jeżeli funkcja jest oznaczona jako eksperymentalna, najpierw ją testuję.

Niektóre rozszerzenia mogą oczekiwać istnienia sesji nawet wtedy, gdy standardowy koszyk jest pusty. Dlatego na sklepie produkcyjnym najpierw sprawdzam checkout, wishlisty, personalizację produktów i pozostałe dodatki.

9. Czy warto skrócić czas życia koszyka?

Można, ale nie jest to pierwsza rzecz, którą robię.

WooCommerce pozwala modyfikować długość sesji przy pomocy filtrów:

add_filter( 'wc_session_expiring', function() { return 60 * 60 * 23; } ); add_filter( 'wc_session_expiration', function() { return 60 * 60 * 24; } );

W tym przykładzie koszyk wygasałby po około 24 godzinach.

Nie wklejam jednak takiego kodu wyłącznie dlatego, że tabela sesji jest duża.

Najpierw pytam:

  • ilu klientów wraca do koszyka później,
  • czy sklep prowadzi kampanie remarketingowe,
  • czy proces zakupowy jest długi,
  • czy produkty wymagają porównywania przed zakupem,
  • czy problemem naprawdę są aktywne sesje, czy stare rekordy.

Krótszy czas sesji może zmniejszyć liczbę zapisanych koszyków, ale może też pogorszyć doświadczenie klientów wracających po kilku godzinach lub następnego dnia.

Sesja koszyka to nie to samo co „Hold stock”

Te dwa mechanizmy łatwo ze sobą pomylić.

Mechanizm Do czego służy? Co się dzieje po wygaśnięciu?
Sesja koszyka Zapamiętuje stan klienta i jego koszyka. Stary koszyk nie musi być dalej odtwarzany.
Hold stock Rezerwuje zapas przy określonych zamówieniach oczekujących na płatność. Po wygaśnięciu rezerwacji produkt może wrócić do dostępnego stanu.

Czyszczenie sesji nie jest więc sposobem na zarządzanie rezerwacją stanów magazynowych dla nieopłaconych zamówień.

10. Sprawdź rzeczywisty rozmiar tabeli, a nie tylko liczbę rekordów

Sto tysięcy małych rekordów może być mniejszym problemem niż znacznie mniejsza liczba bardzo dużych sesji.

W phpMyAdmin można podejrzeć rozmiar tabeli, a w MySQL również sprawdzić go zapytaniem:

SELECT table_name, ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'wp_woocommerce_sessions';

Ponownie: nazwę tabeli dopasowuję do prefiksu konkretnego WordPressa.

11. Dlaczego pojedyncze sesje mogą być bardzo duże?

Sama zawartość prostego koszyka nie zawsze jest jedyną informacją zapisywaną w sesji.

Rozszerzenia WooCommerce mogą dokładać tam własne dane, np. dotyczące:

  • konfiguratora produktu,
  • filtrów i wycen dynamicznych,
  • rezerwacji,
  • dodatkowych pól produktu,
  • integracji abonamentowych,
  • niestandardowej logiki koszyka.

Jeśli tabela ma nieproporcjonalnie duży rozmiar przy stosunkowo małej liczbie rekordów, analizuję również zawartość pojedynczych sesji.

12. Po dużym czyszczeniu baza nie zawsze od razu pokaże mniejszy rozmiar

To kolejny element, który potrafi wprowadzić w błąd.

Możesz usunąć dużą liczbę rekordów, a panel hostingu nadal pokaże podobny rozmiar tabeli.

Wynika to ze sposobu zarządzania przestrzenią przez silnik bazy danych.

Nie uruchamiam jednak operacji optymalizacji dużej tabeli w środku największego ruchu tylko po to, aby liczba megabajtów od razu wyglądała lepiej.

Na dużym sklepie taką operację planuję świadomie i sprawdzam możliwości konkretnego hostingu.

Czy duża tabela sesji naprawdę może spowalniać WooCommerce?

Może mieć wpływ na wydajność, ale nie traktuję jej jako uniwersalnej odpowiedzi na każdy wolny sklep.

Duża lub zaniedbana tabela może zwiększać:

  • rozmiar bazy danych,
  • czas wykonywania kopii zapasowych,
  • ilość danych obsługiwanych przez MySQL,
  • koszt części operacji administracyjnych,
  • czas migracji sklepu.

Ale jeśli WooCommerce wykorzystuje 100% CPU, nadal sprawdzam również:

  • WP-Cron i Action Scheduler,
  • boty,
  • ciężkie zapytania SQL,
  • wtyczki,
  • brak cache,
  • importy i integracje,
  • zasoby hostingu.

Optymalizacja WooCommerce powinna usuwać prawdziwe wąskie gardło, a nie tylko najmocniej rzucającą się w oczy tabelę w phpMyAdmin.

Jak diagnozuję przepełnione sesje WooCommerce krok po kroku?

01

Sprawdzam rozmiar tabeli

Porównuję liczbę rekordów oraz rzeczywisty rozmiar woocommerce_sessions.

02

Liczy się liczba wygasłych sesji

Ustalam, jaka część tabeli rzeczywiście nie powinna być już potrzebna.

03

Robię backup

Dopiero po wykonaniu kopii przechodzę do jakiegokolwiek ręcznego czyszczenia SQL.

04

Usuwam tylko to, co powinno wygasnąć

Przy działającym sklepie wolę wygasłe rekordy niż reset wszystkich aktywnych koszyków.

05

Sprawdzam WP-Cron

Jeżeli automatyczne sprzątanie nie działa, naprawiam przyczynę zamiast ustawiać sobie ręczne czyszczenie co tydzień.

06

Analizuję źródło nowych sesji

Sprawdzam realny ruch, boty oraz dodatki, które mogą inicjować lub rozbudowywać sesje.

07

Monitoruję bazę po zmianach

Po kilku dniach i tygodniach sprawdzam, czy tabela rośnie już w normalnym tempie.

Czego nie robię przy dużej tabeli wp_woocommerce_sessions?

Ryzykownie TRUNCATE na działającym sklepie

Usunie wszystkie sesje, również koszyki osób, które właśnie planują zakup.

Rozsądniej Diagnoza i wygasłe rekordy

Najpierw określam skalę problemu, a dopiero później czyszczę odpowiednie dane.

Nie instaluję też pięciu wtyczek „database cleaner” bez sprawdzenia, które tabele rzeczywiście są problemem.

Każde dodatkowe narzędzie działające automatycznie na bazie sklepu powinno mieć jasno określony zakres działania.

Czyszczenie sesji nie może psuć doświadczenia klienta

Wydajność jest ważna, ale koszyk istnieje właśnie po to, żeby użytkownik nie musiał zaczynać zakupów od nowa.

Wyobraź sobie klienta, który:

dodaje 5 produktów ↓ porównuje ofertę ↓ wraca wieczorem ↓ koszyk jest pusty

Technicznie baza może być trochę czystsza, ale sprzedażowo takie rozwiązanie nie ma sensu.

Dlatego podczas budowy sklepu internetowego WooCommerce patrzę na wydajność razem z procesem zakupowym. Optymalizacja ma przyspieszać sklep bez usuwania funkcji, które pomagają klientowi dokonać zakupu.

Stary WooCommerce często wymaga szerszej optymalizacji niż samo czyszczenie sesji

Jeżeli sklep działa od kilku lat, był wielokrotnie przebudowywany i ma kilkadziesiąt aktywnych lub porzuconych rozszerzeń, sesje mogą być tylko jednym z wielu problemów.

Wtedy sprawdzam też:

  • Action Scheduler,
  • stare transients,
  • osierocone dane w bazie,
  • autoload w tabeli options,
  • stare tabele po usuniętych wtyczkach,
  • cache obiektowy,
  • PHP i konfigurację serwera,
  • zapytania generowane przez motyw i wtyczki.

Przy większym zakresie zmian można wtedy podejść do tematu jako do odświeżenia lub przebudowy istniejącego sklepu , a nie kolejnego jednorazowego „czyszczenia bazy”.

Kiedy warto szukać przyczyny szerzej niż w samej bazie?

Jeżeli po usunięciu wygasłych sesji WooCommerce nadal działa wolno, oznacza to, że trzeba przejść poziom wyżej.

Na stronynazlecenie.pl zajmuję się zarówno WordPressem i WooCommerce, jak i optymalizacją techniczną stron oraz sklepów, dlatego przy takich problemach nie patrzę wyłącznie na pojedynczą tabelę.

Często dopiero zestawienie logów serwera, zapytań do bazy, WP-Cronu, wtyczek i ruchu botów pokazuje, dlaczego sklep rzeczywiście wykorzystuje za dużo zasobów.

Moja checklista przy rosnącej tabeli WooCommerce Sessions

  • Sprawdzam liczbę rekordów w tabeli sesji.
  • Porównuję ją z liczbą wygasłych rekordów.
  • Sprawdzam rzeczywisty rozmiar tabeli w MB lub GB.
  • Wykonuję backup bazy przed czyszczeniem.
  • Nie usuwam aktywnych koszyków bez potrzeby.
  • Przy dużej tabeli czyszczę dane partiami.
  • Sprawdzam działanie WP-Cronu i crona serwerowego.
  • Analizuję boty i nietypowo dużą liczbę nowych sesji.
  • Sprawdzam wtyczki przechowujące dodatkowe dane w sesjach.
  • Weryfikuję funkcje zarządzania pustymi sesjami dostępne w używanej wersji WooCommerce.
  • Po zmianach monitoruję ponownie wzrost tabeli.
Optymalizacja WooCommerce

Tabela sesji rośnie, baza puchnie, a WooCommerce działa coraz wolniej?

Mogę sprawdzić wp_woocommerce_sessions, WP-Cron, Action Scheduler, ruch botów, bazę danych i konfigurację serwera. Zamiast kasować wszystkie koszyki znajdę przyczynę, dlaczego stare dane nie są sprzątane albo dlaczego sklep generuje ich tak dużo.

FAQ

Sesje i stare koszyki WooCommerce – najczęstsze pytania

Co to jest tabela wp_woocommerce_sessions?

Przy standardowej konfiguracji WooCommerce tabela z sufiksem woocommerce_sessions przechowuje dane związane z sesjami klientów, dzięki którym sklep może m.in. odtwarzać stan koszyka użytkownika.

Czy duża tabela wp_woocommerce_sessions może spowalniać sklep?

Bardzo duża liczba niepotrzebnych rekordów może zwiększać rozmiar bazy i koszt części operacji, ale nie zakładam, że jest jedyną przyczyną wolnego WooCommerce. Analizuję również PHP, zapytania SQL, cron, boty, cache i aktywne wtyczki.

Jak sprawdzić liczbę sesji WooCommerce?

Liczbę rekordów można sprawdzić bezpośrednio w narzędziu do obsługi bazy albo zapytaniem SQL COUNT(*) wykonanym na tabeli woocommerce_sessions. Nazwa tabeli zależy od prefiksu używanego przez WordPress.

Jak usunąć wygasłe sesje WooCommerce?

WooCommerce posiada własny mechanizm sprzątania wygasłych sesji. Jeżeli nie działa prawidłowo, sprawdzam cron. W sytuacji serwisowej można również usunąć z bazy wyłącznie rekordy, których session_expiry już minął, ale przed operacją wykonuję kopię bazy.

Czy „Clear customer sessions” usuwa koszyki klientów?

Tak. Narzędzie WooCommerce czyszczące wszystkie sesje klientów usuwa również dane aktualnych sesji, w tym bieżące koszyki. Dlatego nie używam go jako rutynowego narzędzia optymalizacyjnego w środku normalnej sprzedaży.

Jak długo WooCommerce przechowuje koszyk?

Domyślna sesja koszyka WooCommerce trwa około 48 godzin. Można ją zmienić filtrami, ale zbyt krótki czas może pogorszyć doświadczenie klientów wracających do rozpoczętych zakupów.

Dlaczego wygasłe sesje WooCommerce nie są usuwane?

Jedną z pierwszych rzeczy, które sprawdzam, jest działanie WP-Cronu lub crona systemowego. Problemem może być także nietypowa konfiguracja, konflikt rozszerzeń albo bardzo duża liczba nowych sesji tworzonych na bieżąco.

Czy boty mogą zapełniać tabelę WooCommerce Sessions?

Mogą zwiększać liczbę sesji, jeśli wykonują działania inicjujące mechanizm sesyjny WooCommerce. Przy nagłym wzroście tabeli porównuję więc liczbę sesji z realnym ruchem oraz analizuję logi serwera.

Czy warto skrócić czas sesji WooCommerce?

Czasami tak, ale nie traktuję tego jako pierwszego rozwiązania. Najpierw sprawdzam, czy problemem są naprawdę aktywne sesje, czy raczej wygasłe rekordy, które nie zostały prawidłowo wyczyszczone.


Stronynazlecenie.pl
Przegląd prywatności

Ta strona korzysta z ciasteczek, aby zapewnić Ci najlepszą możliwą obsługę. Informacje o ciasteczkach są przechowywane w przeglądarce i wykonują funkcje takie jak rozpoznawanie Cię po powrocie na stronę internetową i pomaganie w zrozumieniu, które sekcje witryny są dla Ciebie najbardziej interesujące i przydatne.

Więcej informacji znajdziesz w polityce prywatności.

Wyceń usługę za darmo →