Prevelik wp_woocommerce_sesije u bazi podataka [Kako popraviti]

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

Za online trgovinu veličine modeSte, WooCommerce također se može pokrenuti na "dijeljenom hostingu", s lakoćom podržavajući 5.000 proizvoda / 100 narudžbi dnevno, ako korištena tema ne troši mnogo resursa i ne zlorabite 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 je online trgovina vel modepočinje trošiti enormno mnogo RAM resursa i CPU 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_sesije ?

Kao što možemo pretpostaviti iz njegovog imena, tablica "wp_woocommerce_sessions”Sadrži PHP sesije (PHP sesije).
Te su sesije radnje korisnika web stranice (ili web robota) i većinu vremena do baze podataka dolaze putem kolačića. u wp_woocommerce_sesije su pohranjeni 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 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, ne događa se uvijek da se ove 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 izbrisati tablicu wp_woocommerce_sessions iz SQL-a?

1. ići Nadzorna 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 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 njemu i po defaultu će opet dobiti proporcije, što nije poželjno.

Kako spriječiti trajno pohranjivanje klijentskih sesija WooCommerce - wp_woocommerce_sessions?

Gore sam pokazao kako tablica "wp_woocommerce_sessions" iz baze podataka, no problem će se ponovno pojaviti nakon nekoliko dana kada se klijentske sesije ponovno skupe.

prije WooCommerce 2.5, klijentske sesije su snimljene putem kolačića, da bi se kasnije spremile u tablicu WordPress "wp_options".
Za veće trgovine ova metoda je često dovodila do katastrofa. “Wp_options„Biti vitalni stol za WordPress, koje koriste opće opcije i postavke. Identificiranje i ručno brisanje klijentskih sesija pohranjenih u wp_options to nije bio lak posao.
Performanse WooCommerce nisu bili najbolji, a skalabilnost tijekom vremena bila je osjetljiva točka.

Uz lansiranje WooCommerce 2.5 u 2015., programeri WooCommerce uveo novi sustav rukovanja i pohrane sesija WooCommerce, Na temelju Upravitelj WP sesija. 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 su prije WooCommerce 2.5 i koji su tijekom vremena stalno dobivali ažuriranja, imaju nekih problema u vezi s automatskim brisanjem klijentskih sesija. Najvjerojatnije se radi o bugu koji se pojavio na novijoj verziji WooCommerce 2.5 ili dodatak WordPress / WooCommerce koji nije pratio ažuriranja.

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.

Vidio sam da je WooCommerce nudi za samo 29 dolara dodatak koji može upravljati korisničkim sesijama. "Obriši 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.

Strastveni zaljubljenik u tehnologiju, s veseljem pišem na StealthSettings.com od 2006. godine. Imam bogato iskustvo s operativnim sustavima: macOS, Windows i Linux, kao i s programskim jezicima i platformama za bloganje (WordPress) i za internetske trgovine (WooCommerce, Magento, PrestaShop).

kako » Ugađanja i hakovi » Prevelik wp_woocommerce_sesije u bazi podataka [Kako popraviti]

1 misao o “Prevelik wp_woocommerce_sesije u bazi podataka [Kako popraviti]"

  1. Nemam načina da izbrišem podatke teški 500mb i imam ograničenje od 1000mb u minuti za brisanje sve je opet potpuno popunjeno... .neko rješenje?

    odgovor
Ostavite komentar