Prevelika wp_woocommerce_sessions v zbirki podatkov [Kako popraviti]

Kot sem rekel v drugih člankih, WooCommerce je vse bolj robusten in prilagodljiv modul, ki lahko WordPress spremeni v Idealna spletna trgovina za zagonsko podjetje.

Za skromno spletno trgovino lahko WooCommerce deluje na "deljenem gostovanju" in lahko brez težav podpira 5.000 izdelkov / 100 naročil na dan, če uporabljena tema ne porabi veliko virov in ne zlorablja drugih modulov (vtičnikov).

Optimizacija izvorne kode Teme, moduli (vtičniki WP) in optimizacija baze podatkov obstajata tudi dva vidika, pri katerih moramo biti zelo previdni.

Pred dnevi sem opazil, da se začenja skromna spletna trgovina porabiti veliko RAM-a in CPU virov na namenskem strežniku radodarno. Ta velika poraba virov je privedla do večje "obremenitve" strežnika in dolgega časa nalaganja spletnih strani trgovin.

Ko opazimo neupravičeno veliko obremenitev spletnega strežnika, je dobro, da pred kakršnimi koli ukrepi natančno preučimo vzroke.

V zbirki podatkov sem opazil, da tabela "wp_woocommerce_sessions"Ogromno je. Imel je več kot 6 GB. Ogromen obseg tabele v zbirki podatkov, ki običajno ni presegla 100 MB.

Kaj je wp_woocommerce_sessions?

Kot lahko ugibamo iz njegovega imena, tabela "wp_woocommerce_sessions”Vsebuje seje PHP (PHP seje).
Te seje so dejanja uporabnikov spletnega mesta (ali spletnih robotov) in večino časa pridejo do baze podatkov s pomočjo piškotkov. V wp_woocommerce_sessions so shranjeni podatki o izdelkih, ki jih uporabniki vložijo v nakupovalno košarico, kuponi, stroški pošiljanja, podatki o strankah in številne druge informacije, povezane s postopkom naročanja izdelkov.

Te seje se ustvarijo ne glede na to, ali je uporabnik registriran na spletnem mestu ali ne, običajno pa potečejo in se čez nekaj časa samodejno izbrišejo.

Na žalost se te seje ne izbrišejo in v nekaterih primerih ostanejo trajno shranjene v wp_woocommerce_sessions, zaradi česar je tabela precej velika.

Kako izbrisati tabelo wp_woocommerce_sessions iz SQL?

1. pojdite na Splošno →  WooCommerce →  Status →  Orodja (zavihek).

2. Pomaknite se navzdol do možnosti "Počistite seje strank“. Previdno! Brisanje sej strank pomeni brisanje vseh izdelkov, ki jih dajo v nakupovalni voziček. Če med brisanjem teh sej obstajajo kupci, ki imajo izdelke v košarici, bodo izginili in morebitno spletno naročilo ne bo dokončano.

3. Kliknite "Počisti" in potrdite postopek.

Na tej točki je tabela "wp_woocommerce_sessions" prazna, zato so bile vse seje nakupovanja strank izbrisane.

Problem še zdaleč ni rešen. Tabela SQL wp_woocommerce_sessions bo v njej znova zbrala podatke in privzeto bo znova pridobila razsežnosti, kar ni zaželeno.

Kako ustavimo trajno shranjevanje sej strank v WooCommerce - wp_woocommerce_sessions?

Zgoraj smo prikazali, kako lahko tabelo "wp_woocommerce_sessions" izpraznimo iz baze podatkov, vendar se bo težava znova pojavila po nekaj dneh, ko se bodo seje strank znova zbrale.

Pred WooCommerce 2.5 so bile seje strank zajete s piškotki, ki so bili nato shranjeni v tabelo WordPress. "wp_options".
V večjih trgovinah je ta metoda pogosto povzročila katastrofe. "Wp_options" je bistvena tabela WordPressa, ki jo uporabljajo splošne možnosti in nastavitve. Prepoznavanje in ročno brisanje odjemalskih sej, shranjenih v wp_options ni bilo lahko delo.
Zmogljivost WooCommerce ni bila najboljša in razširljivost sčasoma je bila občutljiva točka.

Z uvedbo WooCommerce 2.5 leta 2015 so razvijalci WooCommerce predstavili nov sistem za obdelavo in shranjevanje sej WooCommerce, ki temelji na Upravitelj sej WP. Ta sistem je privedel do nastanka wp_woocommerce_sessions. Namenska tabela za odjemalske seje, ki v zbirki podatkov ne deluje z drugimi tabelami. V primeru večjih napak naj bodo izgube minimalne.

Kar sem opazil, imajo spletne trgovine, ki so se začele pred WooCommerce 2.5 in so bile sčasoma nenehno posodobljene, nekaj težav s samodejnim brisanjem odjemalskih sej. Najverjetneje gre za napako, ki se je pojavila v novejši različici WooCommerce 2.5 ali za vtičnik WordPress / WooCommerce, ki ni sledil posodobitvam.

V mojem primeru je šlo za konflikt s funkcijo, dodano v datoteko functions.php teme in katere preprečuje samodejno brisanje po poteku sej iz woocommerce_sessions.
Če se soočate s takšno težavo, morate natančno raziskati vse možne vzroke. Napaka SQL, dovoljenja SQL, opravilo Cron, konflikti z drugimi vtičniki in nenazadnje preverite spremembe, ki ste jih sčasoma naredili v kodi.

Videli smo, da WooCommerce ponuja vtičnik za samo 29 USD, ki lahko upravlja seje strank. “Počistite košarico in seje za WooCommerce“. Seveda ima modul poleg načrtovanega brisanja sej več orodij, ki bi vam lahko pomagala.

Preprostejša možnost načrtovano brisanjewoocommerce_sessions”V enodnevnih presledkih, je na voljo z naslednjo kodo v 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();
}

Pustite komentar, če potrebujete pomoč ali imate drugo rešitev.

Navdušen sem nad tehnologijo, rad preizkušam in pišem vaje o operacijskih sistemih macOS, Linux, Windows, o WordPressu, WooCommerceu in konfiguraciji spletnega strežnika LEMP (Linux, NGINX, MySQL in PHP). Pišem naprej StealthSettings.com od leta 2006, nekaj let kasneje pa sem začel pisati na iHowTo.Tips vadnice in novice o napravah v ekosistemu Apple: iPhone, iPad, Apple Watch, HomePod, iMac, MacBook, AirPods in dodatki.

Pustite komentar