Too large wp_woocommerce_sessions in Database [How-To Fix]

Asa cum am spus si in alte articole, WooCommerce este un modul din ce in mai robust si mai flexibil, capabil sa transforme WordPress intr-un magazin online ideal pentru o afacere la inceput.

Pentru un magazin online de dimensiuni modeste, WooCommerce poate fi rulat si pe un “shared hosting”, putand sa suporte lejer si 5.000 de produse / 100 comenzi la zi, daca tema folosita nu consuma multe resurse si nu faceti abuz de alte module (plugins).

Optimizarea codului sursa din tema (WP Themes), module (WP Plugins) si optimizarea bazei de date sunt de asemenea doua aspecte la care trebuie sa avem multa grija.

Am observat zilele trecute ca un magazin online de dimeniuni modeste incepe sa consume enorm de multe resurse RAM si CPU pe un server dedicat generos. Acest consum mare de resurse au dus implicit la un “load” crescut pe server si un timp mare de incarcare a paginilor magazinului onine.

Cand observam un load nejustificat de mare pe un server web, este bine sa investigam cu atentie cauzele, inainte sa luam orice masura.

In baza de date am observat ca tabelul “wp_woocommerce_sessions” este enorm de mare. Avea peste 6 GB. Un volum imens pentru un tabel dintr-o baza de date care in mod normal nu depasea 100 MB in total.

Ce este wp_woocommerce_sessions ?

Asa cum putem sa intuim si din numele lui, tabelul “wp_woocommerce_sessions” contine sesiunile PHP (PHP Sessions).
Aceste sesiuni sunt actiuni ale utilizatorilor din site (sau ale robotilor web) si de cele mai multe ori ajung in baza de date prin intermediul cookies. In wp_woocommerce_sessions sunt stocate date despre produsele puse de utilizatori in cosul de cumparaturi, cupoane, taxe de transport, date ale clientului si multe alte informatii legate de procesul de comanda produs.

Aceste sesiuni sunt create chiar daca utilizatorul este sau nu inregistrat in site si in mod normal trebuie sa expire si sa stearga automat dupa un timp.

Din pacate nu se intampla intotdeauna ca aceste sesiuni sa fie sterse si, in unele cazuri acestea raman stocate permanent in wp_woocommerce_sessions, ceea ce face ca aest tabel sa atinga un volum destul de mare.

Cum stergem tabelul wp_woocommerce_sessions din SQL?

1. Mergem in Dashboard →  WooCommerce →  Status →  Tools (tab).

2. Derulam in jos pana la optiunea “Clear customer sessions“. Atentie! Stergerea sesiunilor clientilor presupune stergerea tuturor produselor puse de acestia in cosul de cumparaturi. Daca in timp ce stergeti aceste sesiuni sunt clienti care au produse in cos, acestea or sa dispara, iar eventuala comanda online nu va fi finalizata.

3. Click “Clear” si confirmari operatiunea.

In acest moment tabelul “wp_woocommerce_sessions” este gol, deci toate sesiunile de cumparaturi ale clientilor au fost sterse.

Problema nu este rezolvata nici pe departe. Tabelul SQL wp_woocommerce_sessions va aduna iar date in el si implicit va capata proportii din nou, ceea nu este de dorit.

Cum facem ca sesiunile clientilor sa nu mai stocate permanent in WooCommerce – wp_woocommerce_sessions?

Am aratat mai sus cum poate fi golit tabelul “wp_woocommerce_sessions” din baza de date, insa problema va aparea din nou dupa cateva zile in care se vor aduna din nou sesiuni ale clientilor.

Inainte de WooCommerce 2.5, sesiunile clientilor erau capturate prin intermediul cookies, ca mai apoi sa fie salvate in tabelul WordPress “wp_options“.
Pentru magazinele mai mari aceasta metoda a dus deseori la dezastre. “wp_options” fiind tabel vital al WordPress, utilizat de optiunile si setarile generale. Identificarea si stergerea manuala a sesiunilor clientilor stocate in wp_options nu era o munca tocmai usoara.
Performantele WooCommerce nu erau cele mai bune, iar scalabilitatea in timp era un punct sensibil.

Odata cu lansarea WooCommerce 2.5 in 2015, dezvoltatorii WooCommerce au introdus un nou sistem de manipulare si stocare a sesiunilor WooCommerce, bazat pe WP Sessions Manager. Acest sistem a dus aparitia wp_woocommerce_sessions. Un tabel dedicat pentru sesiunile clientilor, care in baza de date sa nu interactioneze cu alte tabele. In cazul unor erori majore pierderile sa fie minime.

Din ceea ce am observat, magazinele online lansate inainte de WooCommerce 2.5 si care au primit actualizari constante in timp, au unele probleme in ceea ce priveste stergerea automata a sesiunilor client. Cel mai probabil este vorba despre un bug aparut pe o versiune mai noua de WooCommerce 2.5 sau de un plugin WordPress / WooCommerce care nu a tinut pasul cu actualizarile.

In cazul meu a fost vorba de un conflict cu o functie adaugata in fisierul functions.php al temei, si care impiedica stergerea automata dupa un timp al sesiunilor expirate din woocommerce_sessions.
Daca va confruntati cu o astfel de problema trebuie sa investigati cu atentie toate posibilele cauze. Eroare SQL, persmisiuni SQL, Cron Job, conflicte cu alte plugin-uri si nu in ultimul rand verificati modificarile aduse de dvs. in cod de-a lungul timpului.

Am vazut ca WooCommerce ofera pentru doar $29 un plugin capabila sa administreze sisiunile clientilor. “Clear Cart and Sessions for WooCommerce“. Bineinteles, pe langa stergerea programata a sesiunilor, modulul are mai multe unelte care v-ar putea fi de ajutor.

O optiune mai simpla de stergere programata a “woocommerce_sessions” la intervale de o zi, este dispobila cu urmatorul cod in 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();
}

Lasa-ti un comentariu daca aveti nevoie de ajutor sau aveti o alta solutie.

Pasionat de tehnologie, scriu cu plăcere pe StealthSettings.com începând cu anul 2006. Am o bogată experiență în sistemele de operare: macOS, Windows și Linux, dar și în limbaje de programare și platforme de blogging (WordPress) și pentru magazine online (WooCommerce, Magento, PrestaShop).

1 thought on “Too large wp_woocommerce_sessions in Database [How-To Fix]”

  1. No tengo manera de borrar los datos pesa 500mb y tengo limite de 1000mb al minuto de borrar todo vuelve a llenarse completamente….alguna solucion?

    Reply
Leave a Comment