Wp_woocommerce_sessions nel database troppo grande [come risolvere]
Come ho detto in altri articoli, WooCommerce è un modulo sempre più robusto e flessibile, capace di trasformare WordPress in un negozio online ideale per un'azienda agli inizi.
contenuto
Per un negozio online di dimensioni modeste, WooCommerce può essere eseguito anche su a “hosting condiviso”, potendo supportare facilmente 5.000 prodotti / 100 ordini al giorno, se il tema utilizzato non consuma molte risorse e non si abusa di altri moduli (plugin).
Ottimizzazione del codice sorgente dal tema (Temi WP), moduli (Plugin WP) e ottimizzazione della banca dati ci sono poi due aspetti ai quali bisogna prestare molta attenzione.
L'altro giorno ho notato che sta aprendo un piccolo negozio online consumare enormi quantità di risorse RAM e CPU su un server dedicato generoso. Questo elevato consumo di risorse ha portato implicitamente a a “carico” aumentato sul server e un lungo tempo di caricamento delle pagine del negozio online.
Quando notiamo un carico irragionevolmente elevato su un server web, è bene indagare attentamente le cause, prima di prendere qualsiasi misura.
Nel database ho notato che table “wp_woocommerce_sessions” è enormemente grande. Erano più di 6 GB. Un volume enorme per una tabella in un database che normalmente non superava i 100 MB in totale.

Cos'è wp_woocommerce_sessions?
Come possiamo intuire dal suo nome, il tavolo “wp_woocommerce_sessions” contiene sessioni PHP (Sessioni PHP).
Queste sessioni sono azioni degli utenti del sito (o robot web) e la maggior parte delle volte finiscono nel database tramite i cookie. In wp_woocommerce_sessions vengono archiviati i dati sui prodotti inseriti dagli utenti nel carrello, coupon, spese di spedizione, dati dei clienti e molte altre informazioni relative al processo di ordinazione del prodotto.
Queste sessioni vengono create anche se l'utente è registrato al sito o meno e normalmente devono scadere e cancellarsi automaticamente dopo un po'.
Sfortunatamente, non sempre accade che queste sessioni vengano cancellate e, in alcuni casi, rimangono permanentemente archiviate in wp_woocommerce_sessions, il che fa sì che questa tabella raggiunga un volume piuttosto elevato.
Come eliminiamo la tabella? wp_woocommerce_sessions tuo SQL?
1. Andiamo a Pannello di controllo → WooCommerce → Stato → Utensili (scheda).
2. Scorri verso il basso fino all'opzione “Sessioni cliente chiare“. Attento! Eliminare le sessioni dei clienti significa eliminare tutti i prodotti da loro inseriti nel carrello. Se mentre elimini queste sessioni ci sono clienti che hanno prodotti nel carrello, questi scompariranno e l'eventuale ordine online non verrà completato.
3. Clicca “Chiaro” e confermare l'operazione.

In questo momento il tavolo “wp_woocommerce_sessions” è vuoto, quindi tutte le sessioni di acquisto dei clienti sono state eliminate.
Il problema è lungi dall’essere risolto. La tabella SQL wp_woocommerce_sessions raccoglierà nuovamente i dati al suo interno e per impostazione predefinita acquisirà nuovamente proporzioni, il che non è auspicabile.
Come possiamo impedire che le sessioni dei clienti vengano archiviate in modo permanente in WooCommerce – wp_woocommerce_sessions?
Ho mostrato sopra come è possibile svuotare la tabella “wp_woocommerce_sessions” dal database, ma il problema si ripresenterà dopo alcuni giorni quando le sessioni del client si riuniranno nuovamente.
Prima di WooCommerce 2.5, le sessioni dei clienti venivano catturate tramite cookie e quindi salvate nella tabella WordPress “wp_options“.
Per i negozi più grandi, questo metodo spesso portava a disastri. “wp_options” essendo la tabella vitale di WordPress, utilizzata dalle opzioni e dalle impostazioni generali. Identificazione e cancellazione manuale delle sessioni cliente archiviate wp_options non è stato esattamente un lavoro facile.
Le prestazioni di WooCommerce non erano delle migliori e la scalabilità nel tempo era un punto delicato.
Con il rilascio di WooCommerce 2.5 nel 2015, gli sviluppatori di WooCommerce hanno introdotto un nuovo sistema per la gestione e l'archiviazione delle sessioni di WooCommerce, basato su Responsabile delle sessioni WP. Questo sistema ha portato all’emergenza wp_woocommerce_sessions. Una tabella dedicata per le sessioni client, che nel database non deve interagire con altre tabelle. In caso di errori gravi, le perdite dovrebbero essere minime.
Da quanto ho osservato, i negozi online lanciati prima di WooCommerce 2.5 e che hanno ricevuto aggiornamenti costanti nel tempo, presentano alcuni problemi riguardanti la cancellazione automatica delle sessioni dei clienti. Molto probabilmente si tratta di un bug apparso su una versione più recente di WooCommerce 2.5 o su un plugin WordPress/WooCommerce che non ha tenuto il passo con gli aggiornamenti.
Nel mio caso si trattava di un conflitto con una funzione aggiunta al file functions.php del tema e quale impedisce la cancellazione automatica dopo un tempo di sessioni scadute woocommerce_sessions.
Se ti trovi di fronte a un problema del genere, devi indagare attentamente su tutte le possibili cause. Errore SQL, permessi SQL, Cron Job, conflitti con altri plugin e ultimo ma non meno importante, controlla le modifiche che hai apportato al codice nel tempo.
Ho visto che WooCommerce offre per soli 29$ un plugin in grado di gestire le sessioni dei clienti. “Cancella carrello e sessioni per WooCommerce“. Naturalmente, oltre alla cancellazione programmata delle sessioni, il modulo dispone di diversi strumenti che potrebbero aiutarti.
Un'opzione più semplice di cancellazione programmata a “woocommerce_sessions” ad intervalli di un giorno, è disponibile con il seguente codice 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();
}
Lascia un commento se hai bisogno di aiuto o hai un'altra soluzione.
Wp_woocommerce_sessions nel database troppo grande [come risolvere]
Cosa c'è di nuovo
Di Stealth
Appassionato di tecnologia, scrivo volentieri su StealthSettings.com a partire dal 2006. Ho una vasta esperienza nei sistemi operativi: macOS, Windows e Linux, ma anche nei linguaggi di programmazione e nelle piattaforme di blogging (WordPress) e per negozi online (WooCommerce, Magento, PrestaShop).
Visualizza tutti i post di StealthPotrebbe interessarti anche...
Un pensiero su “Wp_woocommerce_sessions nel database troppo grande [come risolvere]”
Non ho modo di cancellare i dati. Pesa 500 MB e ho un limite di 1000 MB. Nel momento in cui cancello tutto, si riempie di nuovo completamente.….qualsiasi soluzione?