For stor wp_woocommerce_sessioner i databasen [Sådan løser du det]

Som jeg sagde i andre artikler, WooCommerce det er et stadig mere robust og fleksibelt modul, der er i stand til at transformere WordPress en Ideel onlinebutik til en opstartsvirksomhed.

For en netbutik af størrelse modeste, WooCommerce den kan også køres på "shared hosting", idet den nemt kan understøtte 5.000 produkter / 100 ordrer om dagen, hvis det anvendte tema ikke tærer på mange ressourcer og du ikke misbruger andre moduler (plugins).

Optimering af kildekode fra (WP-temaer), moduler (WP-plugins) og database optimering der er også to aspekter, som vi skal være meget forsigtige med.

Jeg lagde mærke til den anden dag, at en online butik af størrelser modedet begynder at forbruge enormt mange RAM-ressourcer og CPU på en dedikeret server gavmild. Dette høje ressourceforbrug førte til en øget "belastning" på serveren og en lang indlæsningstid for onines butiksider.

Når vi bemærker en uberettiget høj belastning på en webserver, er det godt at nøje undersøge årsagerne, før du tager nogen handling.

I databasen bemærkede jeg, at tabellen "wp_woocommerce_sessions”Det er enormt. Det havde over 6 GB. Et stort volumen for en tabel i en database, der normalt ikke overstiger 100 MB i alt.

hvad er wp_woocommerce_sessioner?

Som vi kan gætte ud fra hans navn, er tabellen "wp_woocommerce_sessions”Indeholder PHP-sessioner (PHP-sessioner).
Disse sessioner er handlinger udført af webstedsbrugere (eller webrobotter), og det meste af tiden ender de i databasen gennem cookies. I wp_woocommerce_sessioner er lagrede data om produkterne placeret af brugere i indkøbskurven, kuponer, forsendelsesgebyrer, kundedata og mange andre oplysninger relateret til produktbestillingsprocessen.

Disse sessioner oprettes, uanset om brugeren er registreret på webstedet eller ej, og normalt skal den automatisk udløbe og slettes efter et stykke tid.

Desværre sker det ikke altid, at disse sessioner slettes, og i nogle tilfælde forbliver de permanent gemt i wp_woocommerce_sessions, hvilket får denne tabel til at nå en ret stor volumen.

Sådan slettes tabellen wp_woocommerce_sessions fra SQL?

1. tage til Hovedmenu →  WooCommerce →  Status →  Værktøjer (fane).

2. Rul ned til indstillingen "Ryd kundesessioner“. Forsigtig! Sletning af kundesessioner betyder at slette alle de produkter, de lægger i indkøbskurven. Hvis der under sletning af disse sessioner er kunder, der har produkter i indkøbskurven, forsvinder de, og den mulige onlineordre afsluttes ikke.

3. Klik på "Ryd", og bekræft handlingen.

I dette øjeblik tabellen "wp_woocommerce_sessions" er tom, så alle kundeindkøbssessioner er blevet slettet.

Problemet er langt fra løst. SQL tabel wp_woocommerce_sessions vil indsamle data i den igen, og som standard vil den få proportioner igen, hvilket ikke er ønskeligt.

Hvordan forhindrer vi klientsessioner i at blive permanent gemt i WooCommerce - wp_woocommerce_sessions?

Jeg har vist ovenfor, hvordan tabellen "wp_woocommerce_sessions" fra databasen, men problemet vil dukke op igen efter et par dage, når klientsessioner samles igen.

før WooCommerce 2.5, blev klientsessioner fanget gennem cookies, for senere at blive gemt i tabellen WordPress "wp_options".
For større butikker har denne metode ofte ført til katastrofer. "Wp_options”At være det vitale bord for WordPress, brugt af generelle muligheder og indstillinger. Identifikation og manuel sletning af klientsessioner gemt i wp_options det var ikke et let job.
Ydelse WooCommerce de var ikke de bedste, og skalerbarhed over tid var et følsomt punkt.

Med lanceringen WooCommerce 2.5 i 2015, udviklerne WooCommerce introducerede et nyt sessionshåndterings- og opbevaringssystem WooCommerce, Baseret på WP Sessions Manager. Dette system førte til fremkomsten wp_woocommerce_sessions. En dedikeret tabel til klientsessioner, som i databasen ikke interagerer med andre tabeller. I tilfælde af større fejl skal tabene være minimale.

Fra hvad jeg har observeret, lancerede onlinebutikkerne før WooCommerce 2.5 og som har modtaget konstante opdateringer gennem tiden, har nogle problemer med automatisk sletning af klientsessioner. Det er højst sandsynligt en fejl, der dukkede op på en nyere version af WooCommerce 2.5 eller et plugin WordPress / WooCommerce som ikke har fulgt med opdateringerne.

I mit tilfælde var det en konflikt med en funktion tilføjet til filen functions.php af temaet, og hvilke forhindrer automatisk sletning efter en tid med udløbne sessioner fra woocommerce_sessions.
Hvis du står over for et sådant problem, skal du nøje undersøge alle mulige årsager. SQL-fejl, SQL-tilladelser, Cron Job, konflikter med andre plugins og sidst men ikke mindst kontrollere de ændringer, du har foretaget i koden over tid.

jeg så det WooCommerce tilbyder for kun $29 et plugin, der er i stand til at administrere kundesessioner. "Ryd kurv og sessioner til WooCommerce“. Foruden den planlagte sletning af sessioner har modulet selvfølgelig flere værktøjer, der kan hjælpe dig.

En enklere mulighed planlagt sletning af “woocommerce_sessions”Med en dags mellemrum, fås med følgende kode 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();
}

Efterlad en kommentar, hvis du har brug for hjælp eller har en anden løsning.

Teknologientusiast, jeg skriver med glæde på StealthSettings.com siden 2006. Jeg har rig erfaring med operativsystemer: macOS, Windows og Linux, samt programmeringssprog og blogplatforme (WordPress) og til onlinebutikker (WooCommerce, Magento, PrestaShop).

Hvordan man » Tweaks & Hacks » For stor wp_woocommerce_sessioner i databasen [Sådan løser du det]

1 tanke om “For stor wp_woocommerce_sessioner i databasen [Sådan løser du det]"

  1. Jeg har ingen måde at slette data vejer 500mb, og jeg har en grænse på 1000mb pr. minut for at slette alt er helt udfyldt igen ... .en eller anden løsning?

    Svar
Efterlad en kommentar