Prevelike wp_woocommerce_sessions u bazi podataka [Kako popraviti]

Kao što sam rekao u drugim člancima, WooCommerce je sve robusniji i fleksibilniji modul, sposoban pretvoriti WordPress u idealna online trgovina za posao na početku.

Za internetsku trgovinu skromne veličine, WooCommerce se također može pokrenuti na “zajednički hosting”, biti u mogućnosti jednostavno podržati 5000 proizvoda / 100 narudžbi dnevno, ako korištena tema ne troši mnogo resursa i ne zlorabite druge module (dodatke).

Optimizacija izvornog koda od teme (WP Themes), modula (WP Plugins) i optimizacija baze podataka postoje i dva aspekta na koje moramo biti vrlo oprezni.

Primijetio sam neki dan da počinje s radom mala online trgovina troše enormne količine RAM-a i CPU resursa na namjenskom poslužitelju velikodušan. Ova velika potrošnja resursa implicitno je dovela do a “opterećenje” povećano na poslužitelju i dugo vrijeme učitavanja onine stranica trgovine.

Kada primijetimo neopravdano veliko opterećenje web poslužitelja, dobro je pažljivo istražiti uzroke, prije poduzimanja bilo kakvih mjera.

U bazi podataka primijetio sam da tablica “wp_woocommerce_sessions” enormno je velik. Bilo je preko 6 GB. Ogroman volumen za tablicu u bazi podataka koja obično ne prelazi ukupno 100 MB.

Što je wp_woocommerce_sessions?

Kao što možemo zaključiti iz njegovog naziva, stol “wp_woocommerce_sessions” sadrži PHP sesije (PHP sesije).
Te su sesije radnje korisnika stranice (ili web robota) i većinu vremena završavaju u bazi podataka putem kolačića. U wp_woocommerce_sessions pohranjuju se podaci o proizvodima koje su korisnici stavili u košaricu, kuponi, naknade za dostavu, podaci o kupcima i mnoge druge informacije vezane uz proces naručivanja proizvoda.

Te se sesije stvaraju čak i ako je korisnik registriran na stranici ili ne i obično moraju isteći i automatski se izbrisati nakon nekog vremena.

Nažalost, ne događa se uvijek da se te sesije izbrišu i, u nekim slučajevima, ostaju trajno pohranjene u wp_woocommerce_sessions, zbog čega ova tablica doseže prilično veliki volumen.

Kako da izbrišemo tablicu? wp_woocommerce_sessions din SQL?

1. Idemo na Nadzorna pločaPrometnicaStatusAlati (kartica).

2. Pomaknite se prema dolje do opcije “Očistite sesije kupaca“. oprezno! Brisanje korisničkih sesija znači brisanje svih proizvoda koje su oni stavili u košaricu. Ako dok brišete ove sesije postoje kupci koji imaju proizvode u košarici, oni će nestati, a eventualna online narudžba neće biti dovršena.

3. Kliknite “Jasan” i potvrdite operaciju.

U ovom trenutku stol “wp_woocommerce_sessions” je prazan, tako da su sve kupovne sesije kupaca izbrisane.

Problem je daleko od rješenja. SQL tablica wp_woocommerce_sessions će opet skupljati podatke u sebi i standardno će opet dobiti proporcije, što nije poželjno.

Kako spriječiti da se sesije korisnika trajno pohranjuju u WooCommerceu – wp_woocommerce_sessions?

Gore sam pokazao kako se stol može isprazniti “wp_woocommerce_sessions” iz baze podataka, no problem će se ponovno pojaviti nakon nekoliko dana kada se ponovno skupe klijentske sesije.

Prije WooCommerce 2.5, korisničke sesije bilježile su se kolačićima, a zatim spremale u WordPress tablicu “wp_options“.
Za veće trgovine ova je metoda često dovodila do katastrofa. “wp_opcije” vitalna tablica WordPressa, koju koriste opcije i opće postavke. Identifikacija i ručno brisanje korisničkih sesija pohranjenih u wp_options nije to baš bio lak posao.
Performanse WooCommercea nisu bile najbolje, a skalabilnost tijekom vremena bila je osjetljiva točka.

Izdavanjem WooCommerce 2.5 2015., WooCommerce programeri predstavili su novi sustav za rukovanje i pohranu WooCommerce sesija, temeljen na Upravitelj WP sesija. Ovaj je sustav doveo do nastanka wp_woocommerce_sessions. Namjenska tablica za klijentske sesije, koja u bazi podataka ne bi trebala komunicirati 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 tijekom vremena dobivale stalna ažuriranja, imaju nekih problema u vezi s automatskim brisanjem korisničkih sesija. Najvjerojatnije se radi o bugu koji se pojavio na novijoj verziji WooCommerce 2.5 ili WordPress / WooCommerce dodatku koji nije pratio ažuriranja.

U mom slučaju to je bio sukob s funkcijom dodanom datoteci functions.php teme, a koji sprječava automatsko brisanje nakon isteka vremena sesija iz woocommerce_sessions.
Ako ste suočeni s takvim problemom, morate pažljivo istražiti sve moguće uzroke. SQL pogreška, SQL dopuštenja, Cron Job, sukobi s drugim dodacima i posljednje, ali ne manje važno, provjerite promjene koje ste napravili u kodu tijekom vremena.

Vidio sam da WooCommerce nudi dodatak koji može upravljati korisničkim sesijama za samo 29 USD. “Očisti košaricu i sesije za WooCommerce“. Naravno, osim planiranog brisanja sesija, modul ima nekoliko alata koji vam mogu pomoći.

Jednostavnija opcija od planirano brisanje a “woocommerce_sessions” u razmacima od jednog dana, dostupan je sa sljedećim kodom u 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 drugo rješenje.

Strastveni u vezi s tehnologijom, pišem sa zadovoljstvom na Stealthsetts.com počevši od 2006. godine. Imam bogato iskustvo u operativnim sustavima: macOS, Windows i Linux, ali i na programskim jezicima i platformama za bloganje (WordPress) i za internetske trgovine (WooCommerce, Magento, Presashop).

Dom Vaš izvor IT vodiča, korisni savjeti i vijesti. Prevelike wp_woocommerce_sessions u bazi podataka [Kako popraviti]

1 misao na "Prevelike wp_woocommerce_sessions u bazi podataka [Kako popraviti]”

  1. Ne mogu izbrisati podatke. Teži 500 MB, a ja imam ograničenje od 1000 MB. Čim sve izbrišem, ponovno se potpuno napuni.….bilo kakvo rješenje?

    Odgovor
Ostavite komentar