Wp_woocommerce_sessions troppo grande nel database [How-To Fix]

Come ho detto in altri articoli, WooCommerce è un modulo sempre più robusto e flessibile, in grado di trasformare WordPress in a Negozio online ideale per una start-up.

Per un modesto negozio online, WooCommerce può essere eseguito su un "hosting condiviso", e può supportare facilmente 5.000 prodotti/100 ordini al giorno, se il tema utilizzato non consuma molte risorse e non abusa di altri moduli (plugin).

Ottimizzazione del codice sorgente da (WP Themes), moduli (WP Plugins) e ottimizzazione del database ci sono anche due aspetti a cui dobbiamo prestare molta attenzione.

Ho notato l'altro giorno che sta nascendo un modesto negozio online consumare molta RAM e risorse della CPU su un server dedicato generoso. Questo elevato consumo di risorse ha comportato un aumento del "carico" sul server e un lungo tempo di caricamento delle pagine del negozio online.

Quando notiamo un carico ingiustificatamente elevato su un server web, è bene indagare attentamente sulle cause prima di intraprendere qualsiasi azione.

Nel database ho notato che la tabella "wp_woocommerce_sessions"È enorme. Aveva oltre 6 GB. Un volume enorme per una tabella in un database che normalmente non superava i 100 MB in totale.

Che cos'è wp_woocommerce_sessions?

Come si può intuire dal suo nome, il tavolo"wp_woocommerce_sessions”Contiene sessioni PHP (Sessioni PHP).
Queste sessioni sono azioni degli utenti del sito (o dei web robot) e il più delle volte raggiungono il database tramite i cookie. In wp_woocommerce_sessions sono archiviati i dati sui prodotti inseriti dagli utenti nel carrello, i coupon, le spese di spedizione, i dati dei clienti e molte altre informazioni relative al processo di ordinazione dei prodotti.

Queste sessioni vengono create indipendentemente dal fatto che l'utente sia registrato al sito e normalmente dovrebbero scadere e cancellarsi automaticamente dopo un po'.

Sfortunatamente, non sempre queste sessioni vengono eliminate e in alcuni casi rimangono memorizzate in modo permanente in wp_woocommerce_sessions, il che rende questa tabella piuttosto grande.

Come eliminare la tabella wp_woocommerce_sessions da SQL?

1. andare a Profilo →  WooCommerce →  Stato →  Strumenti (scheda).

2. Scorri verso il basso fino all'opzione "Cancella sessioni cliente customer“. Attento! Eliminare le sessioni dei clienti significa eliminare tutti i prodotti che hanno inserito nel carrello. Se durante l'eliminazione di queste sessioni ci sono clienti che hanno prodotti nel carrello, questi scompariranno e l'eventuale ordine online non verrà completato.

3. Fare clic su "Cancella" e confermare l'operazione.

A questo punto la tabella "wp_woocommerce_sessions" è vuota, 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 guadagnerà nuovamente le proporzioni, il che non è desiderabile.

Come possiamo impedire che le sessioni dei clienti vengano archiviate in modo permanente in WooCommerce - wp_woocommerce_sessions?

Abbiamo mostrato sopra come la tabella "wp_woocommerce_sessions" può essere svuotata dal database, ma il problema si ripresenterà dopo alcuni giorni in cui le sessioni dei clienti si riuniranno di nuovo.

Prima di WooCommerce 2.5, le sessioni dei clienti venivano catturate tramite cookie, che venivano poi salvate nella tabella di WordPress. "wp_options".
Per i negozi più grandi questo metodo ha spesso portato a disastri. "Wp_options" è una tabella vitale di WordPress, utilizzata da opzioni e impostazioni generali. Identificazione ed eliminazione manuale delle sessioni client memorizzate in wp_options non è stato un lavoro facile.
Le prestazioni di WooCommerce non erano delle migliori e la scalabilità nel tempo era un punto delicato.

Con il lancio di WooCommerce 2.5 nel 2015, gli sviluppatori di WooCommerce hanno introdotto un nuovo sistema di gestione e archiviazione delle sessioni WooCommerce, basato su Gestore sessioni WP. Questo sistema ha portato alla nascita wp_woocommerce_sessions. Una tabella dedicata per le sessioni client, che nel database non interagisce con altre tabelle. In caso di errori gravi, le perdite dovrebbero essere minime.

Da quanto ho notato, i negozi online lanciati prima di WooCommerce 2.5 e che hanno ricevuto aggiornamenti costanti nel tempo, hanno qualche problema con la cancellazione automatica delle sessioni client. 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 era un conflitto con una funzione aggiunta al file functions.php del tema, e che impedisce la cancellazione automatica dopo un periodo di sessioni scadute da woocommerce_sessions.
Se stai affrontando 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 apportate da te al codice nel tempo.

Abbiamo visto che WooCommerce offre a soli 29 dollari un plugin in grado di gestire le sessioni dei clienti. “Cancella carrello e sessioni per WooCommerce“. Ovviamente, oltre alla cancellazione programmata delle sessioni, il modulo dispone di diversi strumenti che potrebbero aiutarti.

Un'opzione più semplice cancellazione programmata di "woocommerce_sessions”A 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.

Appassionato di tecnologia, mi piace testare e scrivere tutorial sui sistemi operativi macOS, Linux, Windows, sulla configurazione del server web WordPress, WooCommerce e LEMP (Linux, NGINX, MySQL e PHP). scrivo su StealthSettings.com dal 2006, e qualche anno dopo ho iniziato a scrivere su iHowTo.Tips tutorial e notizie sui dispositivi nell'ecosistema Apple: iPhone, iPad, Apple Guarda, HomePod, iMac, MacBook, AirPods e accessori.

Lascia un tuo commento