Preveliki wp_woocommerce_sessions u bazi podataka [Kako popraviti]

Kao što sam rekao u drugim člancima, WooCommerce je sve robusniji i fleksibilniji modul, koji WordPress može pretvoriti u Idealna internetska trgovina za pokretanje poduzeća.

Za skromnu internetsku trgovinu WooCommerce se može pokretati na "zajedničkom hostingu" i može lako podržati 5.000 proizvoda / 100 narudžbi dnevno, ako korištena tema ne troši puno resursa i ne zloupotrebljava druge module (dodatke).

Optimizacija izvornog koda WP teme, moduli (WP dodaci) i optimizacija baze podataka postoje i dva aspekta na koja moramo biti vrlo oprezni.

Primijetio sam neki dan da počinje skromna internetska trgovina potrošiti puno RAM-a i CPU resursa na namjenskom poslužitelju velikodušna. Ova velika potrošnja resursa dovela je do povećanog "opterećenja" na poslužitelju i dugog vremena učitavanja stranica internetske trgovine.

Kad primijetimo neopravdano veliko opterećenje na web poslužitelju, dobro je pažljivo istražiti uzroke prije poduzimanja bilo kakvih radnji.

U bazi podataka primijetio sam da tablica "wp_woocommerce_sessions"Veliko je. Imao je preko 6 GB. Ogroman volumen za tablicu u bazi podataka koja obično nije prelazila 100 MB ukupno.

Što je wp_woocommerce_sessions?

Kao što možemo pretpostaviti iz njegovog imena, tablica "wp_woocommerce_sessions”Sadrži PHP sesije (PHP sesije).
Ove su sesije radnje korisnika web mjesta (ili web robota) i većinu puta do baze dolaze putem kolačića. U wp_woocommerce_sessions se pohranjuju podaci o proizvodima koje korisnici stavljaju u košaricu, kuponi, naknade za otpremu, podaci o kupcima i mnoge druge informacije povezane s postupkom naručivanja proizvoda.

Te se sesije stvaraju bez obzira je li korisnik registriran na web mjestu ili ne i obično bi trebale isteći i automatski se izbrisati nakon nekog vremena.

Nažalost, nije uvijek slučaj da se te sesije izbrišu i u nekim slučajevima ostanu trajno pohranjene u wp_woocommerce_sessions, što ovu tablicu čini prilično velikom.

Kako izbrisati tablicu wp_woocommerce_sessions iz SQL-a?

1. ići kontrolna ploča →  WooCommerce →  status →  alat (kartica).

2. Pomaknite se do opcije "Očistite sesije kupaca“. Pažljivo! Brisanje sesija kupaca znači brisanje svih proizvoda koje stavljaju u košaricu. Ako tijekom brisanja ovih sesija postoje kupci koji imaju proizvode u košarici, oni će nestati i moguća mrežna narudžba neće biti dovršena.

3. Pritisnite "Clear" i potvrdite postupak.

U ovom trenutku tablica "wp_woocommerce_sessions" je prazna, pa su izbrisane sve sesije kupca.

Problem je daleko od riješenog. SQL tablica wp_woocommerce_sessions ponovno će prikupiti podatke u njoj i prema zadanim postavkama ponovno će dobiti razmjere, što nije poželjno.

Kako zaustaviti trajno spremanje sesija korisnika u WooCommerce - wp_woocommerce_sessions?

Iznad smo pokazali kako se tablica "wp_woocommerce_sessions" može isprazniti iz baze podataka, ali problem će se ponovno pojaviti nakon nekoliko dana kada će se sesije kupaca ponovno okupiti.

Prije WooCommercea 2.5, sesije kupaca bilježile su se kolačićima, koji su zatim spremljeni u tablicu WordPress. "wp_options".
Za veće trgovine ova metoda često dovodi do katastrofa. "Wp_options" je vitalna tablica WordPressa, koju koriste opće opcije i postavke. Identificiranje i ručno brisanje sesija klijenta pohranjenih u wp_options to nije bio lak posao.
Performanse WooCommerce-a nisu bile najbolje, a skalabilnost je s vremenom bila osjetljiva točka.

Pokretanjem WooCommercea 2.5 u 2015. godini, programeri WooCommercea uveli su novi sustav upravljanja i pohrane sesija WooCommerce, temeljen na WP Sessions Manager. Ovaj je sustav doveo do pojave wp_woocommerce_sessions. Namjenska tablica za sesije klijenta koja u bazi podataka ne komunicira s drugim tablicama. U slučaju većih pogrešaka, gubici bi trebali biti minimalni.

Prema onome što sam primijetio, internetske trgovine pokrenute prije WooCommercea 2.5 i koje su s vremenom dobivale stalna ažuriranja, imaju nekih problema s automatskim brisanjem sesija klijenta. Najvjerojatnije se radi o grešci koja se pojavila na novijoj verziji WooCommerce 2.5 ili dodatku WordPress / WooCommerce koji nije išao u korak s ažuriranjima.

U mom slučaju to je bio sukob s funkcijom dodanom u datoteku functions.php teme, a koja sprječava automatsko brisanje nakon vremena isteka sesija od woocommerce_sessions.
Ako se suočite s takvim problemom, morate pažljivo istražiti sve moguće uzroke. SQL pogreška, SQL dozvole, Cron Job, sukobi s drugim dodacima i na kraju, ali ne najmanje važno, provjerite promjene koje ste napravili u kodu tijekom vremena.

Vidjeli smo da WooCommerce nudi dodatak za samo 29 dolara koji može upravljati sesijama korisnika. “Očistite košaricu i sesije za WooCommerce“. Naravno, uz zakazano brisanje sesija, modul ima nekoliko alata koji bi vam mogli pomoći.

Jednostavnija opcija zakazano brisanje "woocommerce_sessions”U intervalima od jednog dana, dostupan je sa sljedećim kodom na jeziku: 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();
}

Ostavite komentar ako trebate pomoć ili imate neko drugo rješenje.

Zaljubljen u tehnologiju, volim testirati i pisati vodiče o operativnim sustavima macOS, Linux, Windows, o WordPressu, WooCommerceu i LEMP konfiguraciji web poslužitelja (Linux, NGINX, MySQL i PHP). Pišem dalje StealthSettings.com od 2006. godine, a nekoliko godina kasnije počeo sam pisati na vodičima i vijestima o uređajima u ekosustavu iHowTo.Tips Apple: iPhone, iPad, Apple Gledajte, HomePod, iMac, MacBook, AirPods i dodaci.

Ostavite komentar