För stor wp_woocommerce_sessioner i databasen [Så här åtgärdar du]

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

För en nätbutik av storlek modeste, WooCommerce det kan även köras på "shared hosting", att enkelt kunna stödja 5.000 100 produkter / XNUMX beställningar per dag, om temat som används inte förbrukar många resurser och du 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 nätbutik av storlekar modedet börjar 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_sessioner ?

Som vi kan gissa utifrån hans 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 når de databasen via cookies. I wp_woocommerce_sessioner är lagrad data om de produkter som användarna lägger i kundvagnen, kuponger, fraktavgifter, kunddata och mycket annan information relaterad 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 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 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.

För närvarande tabellen "wp_woocommerce_sessions" är tom, så alla kundshoppingsessioner har tagits bort.

Problemet är långt ifrån löst. SQL-tabell 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 ser vi till att klientsessioner inte längre lagras permanent i WooCommerce - wp_woocommerce_sessions?

Jag har visat ovan hur tabellen "wp_woocommerce_sessions" från databasen, men problemet kommer att dyka upp igen efter några dagar när klientsessioner kommer att samlas igen.

före WooCommerce 2.5 fångades klientsessioner genom cookies, för att sparas i tabellen senare 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.
Prestanda WooCommerce de var inte de bästa, och skalbarhet över tid var en känslig punkt.

Med lanseringen WooCommerce 2.5 under 2015, utvecklarna WooCommerce introducerade ett nytt sessionshanterings- och lagringssystem WooCommercebaserat 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.

Från vad jag har observerat, lanserade nätbutikerna tidigare WooCommerce 2.5 och som har fått ständiga uppdateringar över tid, har vissa problem gällande automatisk radering av klientsessioner. Det är med största sannolikhet en bugg som dykt upp i en nyare version av WooCommerce 2.5 eller ett plugin WordPress / WooCommerce som inte hängt 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 det WooCommerce erbjuder för endast $29 ett plugin som kan hantera kundsessioner. "Rensa varukorg 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.

Brinner för teknik, skriver jag med glädje på StealthSettings.com sedan 2006. Jag har lång erfarenhet av operativsystem: macOS, Windows şi Linux, men också i programmeringsspråk och bloggplattformar (WordPress) och för nätbutiker (WooCommerce, Magento, PrestaShop).

Hur man » Tweaks & Hacks » För stor wp_woocommerce_sessioner i databasen [Så här åtgärdar du]

1 tanke på “För stor wp_woocommerce_sessioner i databasen [Så här åtgärdar du]"

  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