For store wp_woocommerce_sessions i databasen [Slik løser du det]

Som jeg sa i andre artikler, WooCommerce er en stadig mer robust og fleksibel modul som kan gjøre WordPress om til en Ideell nettbutikk for en nyetablering.

For en beskjeden nettbutikk kan WooCommerce kjøres på en "delt hosting", og kan enkelt støtte 5.000 produkter / 100 bestillinger per dag, hvis temaet som brukes ikke bruker mange ressurser og ikke misbruker andre moduler (plugins).

Optimalisering av kildekode WP Temaer, moduler (WP Plugins) og database optimalisering det er også to aspekter som vi trenger å være veldig forsiktige med.

Jeg la merke til forleden at en beskjeden nettbutikk starter å konsumere mye RAM og CPU-ressurser på en dedikert server sjenerøs. Dette høye ressursforbruket førte til økt "belastning" på serveren og lang lastetid på nettbutikkens sider.

Når vi merker en uforsvarlig høy belastning på en webserver, er det bra å undersøke årsakene nøye før du tar noen handling.

I databasen la jeg merke til at tabellen "wp_woocommerce_sessions"Den er enorm. Den hadde over 6 GB. Et stort volum for en tabell i en database som normalt ikke overstiger 100 MB totalt.

Hva er wp_woocommerce_sessions?

Som vi kan gjette ut fra navnet hans, er tabellen "wp_woocommerce_sessions”Inneholder PHP-økter (PHP-økter).
Disse øktene er handlinger fra brukerne av nettstedet (eller av webrobotene) og de fleste ganger når de databasen via informasjonskapsler. I wp_woocommerce_sessions lagres data om produktene som er lagt av brukerne i handlekurven, kuponger, fraktkostnader, kundedata og mange andre opplysninger relatert til produktbestillingsprosessen.

Disse øktene opprettes enten brukeren er registrert på nettstedet eller ikke, og normalt skal utløpe og slettes automatisk etter en stund.

Dessverre er det ikke alltid slik at disse øktene blir slettet, og i noen tilfeller forblir de permanent lagret i wp_woocommerce_sessions, noe som gjør denne tabellen ganske stor.

Hvordan slette tabellen wp_woocommerce_sessions fra SQL?

1. gå til Dashbord →  WooCommerce →  status →  verktøy (fane).

2. Bla ned til alternativet "Fjern kundesessioner“. Forsiktig! Slette kundesessioner betyr å slette alle produktene de legger i handlekurven. Hvis det er kunder som har produkter i handlekurven mens du sletter disse øktene, forsvinner de og den mulige online bestillingen blir ikke fullført.

3. Klikk "Slett" og bekreft operasjonen.

På dette tidspunktet er "wp_woocommerce_sessions" -tabellen tom, så alle kundeshoppingøkter er slettet.

Problemet er langt fra løst. SQL-tabellen wp_woocommerce_sessions samler inn data i den igjen, og som standard vil den få proporsjoner igjen, noe som ikke er ønskelig.

Hvordan stopper vi at kundeøkter lagres permanent i WooCommerce - wp_woocommerce_sessions?

Vi viste ovenfor hvordan "wp_woocommerce_sessions" -tabellen kan tømmes fra databasen, men problemet vil dukke opp igjen etter noen dager hvor kundesesjonene vil samles igjen.

Før WooCommerce 2.5 ble kundesesjonene fanget opp via informasjonskapsler, som deretter ble lagret i WordPress-tabellen. "wp_options".
For større butikker har denne metoden ofte ført til katastrofer. "Wp_options" er en viktig tabell for WordPress, brukt av generelle alternativer og innstillinger. Identifisere og slette manuelt klientsessioner lagret i wp_options det var ikke en enkel jobb.
WooCommerce-ytelse var ikke den beste, og skalerbarhet over tid var et følsomt punkt.

Med lanseringen av WooCommerce 2.5 i 2015, har WooCommerce-utviklere introdusert et nytt WooCommerce økthåndterings- og lagringssystem, basert på WP Sessions Manager. Dette systemet førte til fremveksten wp_woocommerce_sessions. En dedikert tabell for klientsessioner, som i databasen ikke samhandler med andre tabeller. Ved store feil, bør tapene være minimale.

Etter det jeg har lagt merke til, har nettbutikker som ble lansert før WooCommerce 2.5, og som har mottatt konstante oppdateringer over tid, noen problemer med automatisk sletting av klientsessioner. Mest sannsynlig er det en feil som dukket opp på en nyere versjon av WooCommerce 2.5 eller et WordPress / WooCommerce plugin som ikke fulgte med oppdateringene.

I mitt tilfelle var det en konflikt med en funksjon som ble lagt til filen functions.php av temaet, og hvilke forhindrer automatisk sletting etter en tid med utløpte økter fra woocommerce_sessions.
Hvis du står overfor et slikt problem, må du undersøke alle mulige årsaker nøye. SQL-feil, SQL-tillatelser, Cron Job, konflikter med andre plugins og sist men ikke minst sjekk endringene du har gjort i koden over tid.

Vi så at WooCommerce kun tilbyr $ 29 en plugin som kan administrere kundesesjoner. “Fjern handlevogn og økter for WooCommerce“. I tillegg til planlagt sletting av økter, har modulen selvfølgelig flere verktøy som kan hjelpe deg.

Et enklere alternativ planlagt sletting av “woocommerce_sessions”Med en dags mellomrom, er tilgjengelig 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();
}

Legg igjen en kommentar hvis du trenger hjelp eller har en annen løsning.

Lidenskapelig om teknologi, jeg liker å teste og skrive opplæringsprogrammer om operativsystemer macOS, Linux, Windows, om WordPress, WooCommerce og LEMP webserverkonfigurasjon (Linux, NGINX, MySQL og PHP). Jeg skriver videre StealthSettings.com siden 2006, og noen år senere begynte jeg å skrive på iHowTo.Tips tutorials og nyheter om enheter i økosystemet. Apple: iPhone, iPad, Apple Se, HomePod, iMac, MacBook, AirPods og tilbehør.

Legg igjen en kommentar