För stora wp_woocommerce_sessions i databas [Hur fixar jag]

Som jag sa i andra artiklar är WooCommerce en allt mer robust och flexibel modul som kan transformeras WordPress i en Perfekt webbutik för nystartade företag.

För en blygsam webbutik kan WooCommerce köras på en "shared hosting" och kan enkelt stödja 5.000 100 produkter / XNUMX beställningar per dag, om temat som används inte förbrukar många resurser och inte missbrukar andra moduler (plugins).

Optimering av källkod WP-teman, 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 blygsam webbutik startar att förbruka enormt många RAM-resurser och CPU på en dedikerad server generös. Denna höga resursförbrukning ledde till en ökad "belastning" på servern och en lång laddningstid för onines butiksidor.

När vi märker en omotiverat hög belastning på en webbserver är det bra att noggrant undersöka orsakerna innan du vidtar några åtgärder.

I databasen märkte jag att tabellen "wp_woocommerce_sessions"Den är enorm. Den hade över 6 GB. En enorm volym för en tabell i en databas som normalt inte överstiger 100 MB totalt.

Vad är wp_woocommerce_sessions?

Som vi kan gissa utifrån hans namn, bordet "wp_woocommerce_sessions”Innehåller PHP-sessioner (PHP-sessioner).
Dessa sessioner är handlingar från användarna av webbplatsen (eller av webbrobotarna) och oftast når de databasen via cookies. I wp_woocommerce_sessions lagras data om produkterna som läggs av användarna i kundvagnen, kuponger, fraktavgifter, kunddata och många andra uppgifter relaterade till produktbeställningsprocessen.

Dessa sessioner skapas oavsett om användaren är registrerad på webbplatsen och normalt ska upphöra och raderas automatiskt efter ett tag.

Tyvärr är det inte alltid så att dessa sessioner raderas och i vissa fall förblir de permanent lagrade i wp_woocommerce_sessions, vilket gör denna tabell ganska stor.

Hur man tar bort tabellen wp_woocommerce_sessions från SQL?

1. gå till Dashboard →  WooCommerce →  status →  verktyg (flik).

2. Bläddra ner till alternativet "Rensa kundsessioner“. Försiktig! Att radera kundsessioner innebär att du tar bort alla produkter de lägger i kundvagnen. Om det finns kunder som har produkter i kundvagnen när de tas bort, kommer de att försvinna och den möjliga onlinebeställningen kommer inte att slutföras.

3. Klicka på "Rensa" och bekräfta åtgärden.

Vid denna tidpunkt är tabellen "wp_woocommerce_sessions" tom, så alla kundhandelssessioner har tagits bort.

Problemet är långt ifrån löst. SQL-tabellen wp_woocommerce_sessions samlar in data i den igen och som standard får den proportioner igen, vilket inte är önskvärt.

Hur hindrar vi att kundsessioner lagras permanent i WooCommerce - wp_woocommerce_sessions?

Vi visade ovan hur tabellen "wp_woocommerce_sessions" kan tömmas från databasen, men problemet kommer att visas igen efter några dagar då kundsessioner samlas igen.

Före WooCommerce 2.5 fångades kundsessioner via cookies och sparades sedan till bordet. WordPress "wp_options".
För större butiker har denna metod ofta lett till katastrofer. "Wp_options”Att vara det vitala bordet för WordPress, används av allmänna alternativ och inställningar. Identifiera och manuellt ta bort klientsessioner lagrade i wp_options det var inte ett enkelt jobb.
WooCommerce-prestanda var inte den bästa, och skalbarhet över tid var en känslig punkt.

Med lanseringen av WooCommerce 2.5 2015 har WooCommerce-utvecklare infört ett nytt hanterings- och lagringssystem för WooCommerce baserat på WP Sessions Manager. Detta system ledde till framväxten wp_woocommerce_sessions. En särskild tabell för klientsessioner, som i databasen inte interagerar med andra tabeller. Vid större fel bör förlusterna vara minimala.

Vad jag har sett har onlinebutiker som lanserats före WooCommerce 2.5 och som har fått ständiga uppdateringar över tid vissa problem med automatisk radering av klientsessioner. Troligtvis är det en bugg som dök upp på en nyare version av WooCommerce 2.5 eller ett plugin WordPress / WooCommerce som inte hängde med i uppdateringarna.

I mitt fall var det en konflikt med en funktion som lagts till i filen functions.php av temat, och vilken förhindrar automatisk radering efter en tid med 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 gjort i koden över tiden.

Jag såg att WooCommerce erbjuder för endast $ 29 ett plugin som kan det adminstress klientsessioner. "Rensa kundvagn och sessioner för WooCommerce“. Naturligtvis har modulen, förutom planerad radering av sessioner, flera verktyg som kan hjälpa dig.

Ett enklare alternativ schemalagd radering av “woocommerce_sessions”Med en dags mellanrum, finns 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.

Hur man » Tweaks & Hacks » För stora wp_woocommerce_sessions i databas [Hur fixar jag]

Passionerad om teknik, jag gillar att testa och skriva handledning om operativsystem macOS, Linux, Windows, handla om WordPress, WooCommerce och konfigurera LEMP webbservrar (Linux, NGINX, MySQL och PHP). jag skriver på StealthSettings.com sedan 2006, och några år senare började jag skriva på iHowTo.Tips handledning och nyheter om enheter i ekosystemet Apple: iPhone, iPad, Apple Klocka, HomePod, iMac, MacBook, AirPods och tillbehör.

1 tanke om “För stora wp_woocommerce_sessions i databasen [Hur man åtgärdar]”

  1. Jag har inget sätt att radera data väger 500mb och jag har en gräns på 1000mb per minut för att radera allt är helt ifyllt igen ... .någon lösning?

    Svara

Lämna en kommentar