Zbyt duże WP_WOOCOMMERCE_SESSIONS W DATABASE [How-to naprawy]

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.

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 PanelWooCommerceStatusNarzę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.

Pasjonując się technologią, z przyjemnością piszę na StealthSetts.com Począwszy od 2006 roku. Mam bogate doświadczenie w systemach operacyjnych: macOS, Windows i Linux, ale także w językach programowania i platformach blogowych (WordPress) oraz w sklepach internetowych (WooCommerce, Magento, Presashop).

Home Twoje źródło samouczków, przydatne wskazówki i wiadomości. Zbyt duże WP_WOOCOMMERCE_SESSIONS W DATABASE [How-to naprawy]

1 Myśl o „Zbyt duże WP_WOOCOMMERCE_SESSIONS W DATABASE [How-to naprawy]”

  1. 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?

    Odpowiedź
Zostaw komentarz