För stor WP_WOOCOMMERCE_SESSIONER I DATABASE [How-to Fix]
Som jag sa i andra artiklar är WooCommerce en allt mer robust och flexibel modul, som kan förvandla WordPress till en idealisk onlinebutik för ett företag i början.
innehåll
För en anspråkslös webbutik kan WooCommerce även köras på en “delad hosting”, att enkelt kunna stödja 5 000 produkter / 100 beställningar per dag, om temat som används inte förbrukar många resurser och du inte missbrukar andra moduler (plugins).
Källkodsoptimering från temat (WP Themes), moduler (WP Plugins) och databasoptimering Det finns också två aspekter som vi måste vara mycket försiktiga med.
Jag märkte häromdagen att en liten webbutik startar förbrukar enorma mängder RAM- och CPU-resurser på en dedikerad server generös. Denna höga resursförbrukning ledde implicit till en “ladda” ökat på servern och en lång laddningstid för onlinebutikssidorna.
När vi märker en orimligt hög belastning på en webbserver är det bra att noggrant undersöka orsakerna, innan du vidtar någon åtgärd.
I databasen märkte jag att tabellen “wp_woocommerce_sessions” den är enormt stor. Det var över 6 GB. En enorm volym för en tabell i en databas som normalt inte översteg 100 MB totalt.

Vad är wp_woocommerce_sessions?
Som vi kan intuita från dess namn, bordet “wp_woocommerce_sessions” innehåller PHP-sessioner (PHP-sessioner).
Dessa sessioner är handlingar av webbplatsanvändare (eller webbrobotar) och för det mesta hamnar de i databasen genom cookies. I wp_woocommerce_sessions lagras data om produkterna som lagts av användare i kundvagnen, kuponger, fraktavgifter, kunddata och mycket annan information relaterad till produktbeställningsprocessen.
Dessa sessioner skapas även om användaren är registrerad på sajten eller inte och måste normalt löpa ut och raderas automatiskt efter ett tag.
Tyvärr händer det inte alltid att dessa sessioner raderas och i vissa fall förblir de permanent lagrade i wp_woocommerce_sessions, vilket gör att denna tabell når en ganska stor volym.
Hur tar vi bort tabellen? wp_woocommerce_sessions din SQL?
1. Vi går till Instrumentbräda → Woocommerce → Status → Verktyg (flik).
2. Rulla ned till alternativet “Tydliga kundsessioner“. Försiktig! Att ta bort kundsessioner innebär att ta bort alla produkter som lagts av dem i kundvagnen. Om medan du raderar dessa sessioner finns det kunder som har produkter i varukorgen, kommer de att försvinna, och den eventuella onlinebeställningen kommer inte att slutföras.
3. Klicka på “Rensa” och bekräfta operationen.

I detta ögonblick bordet “wp_woocommerce_sessions” är tom, så alla kundshoppingsessioner har raderats.
Problemet är långt ifrån löst. SQL-tabellen wp_woocommerce_sessions kommer att samla in data i den igen och som standard kommer den att få proportioner igen, vilket inte är önskvärt.
Hur stoppar vi kundsessioner från att permanent lagras i WooCommerce – wp_woocommerce_sessions?
Jag visade ovan hur bordet kan tömmas “wp_woocommerce_sessions” från databasen, men problemet kommer att dyka upp igen efter några dagar när klientsessioner samlas igen.
Innan WooCommerce 2.5 fångades kundsessioner genom cookies och sparades sedan i WordPress-tabellen “wp_options“.
För större butiker ledde denna metod ofta till katastrofer. “wp_options” är den viktiga tabellen i WordPress, som används av alternativ och allmänna inställningar. Identifiering och manuell radering av kundsessioner lagrade i wp_options det var inte direkt ett lätt jobb.
WooCommerce-prestandan var inte den bästa, och skalbarhet över tid var en känslig punkt.
Med lanseringen av WooCommerce 2.5 2015 introducerade WooCommerce-utvecklare ett nytt system för hantering och lagring av WooCommerce-sessioner, baserat på WP Sessions Manager. Detta system ledde till uppkomsten wp_woocommerce_sessions. En dedikerad tabell för klientsessioner, som i databasen inte ska interagera med andra tabeller. Vid större fel bör förlusterna vara minimala.
Vad jag har observerat har nätbutiker som lanserades före WooCommerce 2.5 och som fått ständiga uppdateringar över tid vissa problem gällande automatisk radering av kundsessioner. Det är med största sannolikhet en bugg som dykt upp på en nyare version av WooCommerce 2.5 eller ett WordPress/WooCommerce-plugin som inte har följt med uppdateringar.
I mitt fall var det en konflikt med en funktion som lagts till i filen functions.php av temat och vilket förhindrar automatisk radering efter en tid av utgångna sessioner från woocommerce_sessions.
Om du står inför ett sådant problem måste du noggrant undersöka alla möjliga orsaker. SQL-fel, SQL-behörigheter, Cron Job, konflikter med andra plugins och sist men inte minst, kontrollera de ändringar du har gjort i koden över tid.
Jag såg att WooCommerce erbjuder för endast $29 ett plugin som kan hantera kundsessioner. “Rensa varukorg och sessioner för WooCommerce“. Naturligtvis, förutom den schemalagda raderingen av sessioner, har modulen flera verktyg som kan hjälpa dig.
Ett enklare alternativ schemalagd radering a “woocommerce_sessions” med en dags mellanrum, är tillgänglig med följande kod i 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();
}
Lämna en kommentar om du behöver hjälp eller har en annan lösning.
För stor WP_WOOCOMMERCE_SESSIONER I DATABASE [How-to Fix]
Vad är nytt
Om Stomma
Passionerad av teknik, skriver jag gärna på StealthSettings.com sedan 2006. Jag har omfattande erfarenhet av operativsystem: macOS, Windows och Linux, samt av programmeringsspråk och bloggplattformar (WordPress) och för webbutiker (WooCommerce, Magento, PrestaShop).
Visa alla inlägg av StealthDu kanske också är intresserad av...
En tanke på “För stor WP_WOOCOMMERCE_SESSIONER I DATABASE [How-to Fix]”
Jag har inget sätt att radera data. Den väger 500MB och jag har en gräns på 1000MB. Så fort jag raderar allt fylls det upp helt igen.….någon lösning?