Jak mówiłem w innych artykułach, WooCommerce jest coraz solidniejszym i elastycznym modułem, który może zamienić WordPressa w idealny sklep internetowy dla biznesu na początek.
treść
W przypadku skromnego sklepu internetowego WooCommerce można również uruchomić na komputerze “hosting współdzielony”, będąc w stanie łatwo obsłużyć 5000 produktów / 100 zamówień dziennie, jeśli zastosowany motyw nie zużywa wielu zasobów i nie nadużywasz innych modułów (wtyczek).
Optymalizacja kodu źródłowego z motywu (Motywy WP), modułów (Wtyczki WP) i optymalizacja bazy danych są też dwa aspekty, na które musimy być bardzo ostrożni.
Któregoś dnia zauważyłem, że rusza mały sklep internetowy zużywają ogromne ilości pamięci RAM i zasobów procesora na serwerze dedykowanym hojny. To wysokie zużycie zasobów pośrednio doprowadziło do: “obciążenie” zwiększone na serwerze i długi czas ładowania stron sklepu internetowego.
Kiedy zauważymy nieuzasadnione duże obciążenie serwera WWW, przed podjęciem jakichkolwiek działań dobrze jest dokładnie zbadać przyczyny.
W bazie danych zauważyłem, że tabela “wp_woocommerce_sessions” jest ogromnie duży. Było ponad 6 GB. Ogromna objętość tabeli w bazie danych, która zwykle nie przekracza łącznie 100 MB.

Co to jest wp_woocommerce_sessions?
Jak możemy się domyślić po nazwie, jest to stół “wp_woocommerce_sessions” zawiera sesje PHP (Sesje PHP).
Sesje te są działaniami użytkowników witryny (lub robotów internetowych) i w większości przypadków trafiają do bazy danych za pośrednictwem plików cookie. W wp_woocommerce_sessions przechowywane są dane o produktach umieszczonych przez użytkowników w koszyku, kuponach, opłatach za wysyłkę, dane klientów i wiele innych informacji związanych z procesem zamawiania produktu.
Sesje te są tworzone nawet jeśli użytkownik jest zarejestrowany w serwisie czy nie i zwykle muszą wygasnąć i po pewnym czasie zostać automatycznie usunięte.
Niestety nie zawsze zdarza się, że sesje te są usuwane i w niektórych przypadkach pozostają na stałe zapisane w wp_woocommerce_sessions, przez co tabela ta osiąga dość duży wolumen.
Jak usunąć tabelę? wp_woocommerce_sessions w SQL?
1. Idziemy do Panel → WooCommerce → Status → Narzędzia (patka).
2. Przewiń w dół do opcji “Wyczyść sesje klientów“. Ostrożny! Usunięcie sesji Klienta oznacza usunięcie wszystkich produktów umieszczonych przez niego w koszyku. Jeśli podczas usuwania tych sesji znajdą się klienci posiadający produkty w koszyku, znikną one, a ewentualne zamówienie online nie zostanie zrealizowane.
3. Kliknij “Jasne” i potwierdź operację.

W tej chwili stół “wp_woocommerce_sessions” jest pusta, więc wszystkie sesje zakupowe klientów zostały usunięte.
Problem jest daleki od rozwiązania. Tabela SQL wp_woocommerce_sessions ponownie zbierze w niej dane i domyślnie ponownie uzyska proporcje, co nie jest pożądane.
Jak uniemożliwić trwałe przechowywanie sesji klientów w WooCommerce – wp_woocommerce_sessions?
Pokazałem powyżej jak można opróżnić stół “wp_woocommerce_sessions” z bazy danych, ale problem pojawi się ponownie po kilku dniach, gdy sesje klientów ponownie się zbiorą.
Przed wersją WooCommerce 2.5 sesje klientów były przechwytywane za pomocą plików cookie, a następnie zapisywane w tabeli WordPress “wp_options“.
W przypadku większych sklepów metoda ta często prowadziła do katastrof. “WP_Options” będąca niezbędną tabelą WordPressa, używaną przez opcje i ustawienia ogólne. Identyfikacja i ręczne usuwanie sesji klientów przechowywanych w wp_options nie było to wcale łatwe zadanie.
Wydajność WooCommerce nie była najlepsza, a skalowalność w czasie była wrażliwym punktem.
Wraz z wydaniem WooCommerce 2.5 w 2015 roku programiści WooCommerce wprowadzili nowy system obsługi i przechowywania sesji WooCommerce, oparty na Menedżer sesji WP. System ten doprowadził do powstania wp_woocommerce_sessions. Dedykowana tabela dla sesji klienta, która w bazie danych nie powinna wchodzić w interakcję z innymi tabelami. W przypadku poważnych błędów straty powinny być minimalne.
Z tego co zaobserwowałem, sklepy internetowe uruchomione przed WooCommerce 2.5 i które z biegiem czasu otrzymywały ciągłe aktualizacje, mają pewne problemy dotyczące automatycznego usuwania sesji klientów. Najprawdopodobniej jest to błąd, który pojawił się w nowszej wersji WooCommerce 2.5 lub wtyczce WordPress/WooCommerce, która nie nadążała za aktualizacjami.
W moim przypadku był to konflikt z funkcją dodaną do pliku functions.php tematu i który zapobiega automatycznemu usuwaniu po upływie czasu sesji z woocommerce_sessions.
Jeśli napotkasz taki problem, musisz dokładnie zbadać wszystkie możliwe przyczyny. Błąd SQL, uprawnienia SQL, zadanie Cron, konflikty z innymi wtyczkami i, co nie mniej ważne, sprawdź zmiany wprowadzone w kodzie na przestrzeni czasu.
Widziałem, że WooCommerce oferuje za jedyne 29 dolarów wtyczkę zdolną do zarządzania sesjami klientów. “Wyczyść koszyk i sesje dla WooCommerce“. Oczywiście oprócz zaplanowanego usuwania sesji moduł posiada kilka narzędzi, które mogą Ci pomóc.
Prostsza opcja zaplanowane usunięcie a “woocommerce_sessions” w odstępach jednego dnia, jest dostępny z następującym kodem w functions.php:
// clean cart every day
if (!wp_next_scheduled('cron_wc_clean_cart')) {
wp_schedule_event( time(), 'daily', 'cron_wc_clean_cart' );
}
add_action ( 'cron_wc_clean_cart', 'wc_clean_session_cart' );
function wc_clean_session_cart() {
global $wpdb;
$wpdb->query( "TRUNCATE {$wpdb->prefix}woocommerce_sessions" );
$wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key='_woocommerce_persistent_cart_" . get_current_blog_id() . "';" );
wp_cache_flush();
}
Zostaw komentarz, jeśli potrzebujesz pomocy lub masz inne rozwiązanie.
Nie mam możliwości usunięcia danych. Waży 500MB i mam limit 1000MB. W chwili, gdy wszystko usunę, ponownie się całkowicie zapełni.….jakiekolwiek rozwiązanie?