Per dideli wp_woocommerce_sessions duomenų bazėje [Pataisymai]

Kaip sakiau kituose straipsniuose, WooCommerce yra vis tvirtesnis ir lankstesnis modulis, galintis paversti „WordPress“ Ideali internetinė parduotuvė pradedančiam verslui.

Kuklios internetinės parduotuvės atveju „WooCommerce“ galima paleisti naudojant „bendrąjį prieglobą“ ir lengvai palaikyti 5.000 produktų / 100 užsakymų per dieną, jei naudojama tema nesuvartoja daug išteklių ir nepiktnaudžiauja kitais moduliais (papildiniais).

Šaltinio kodo optimizavimas WP temos, moduliai (WP papildiniai) ir duomenų bazės optimizavimas taip pat yra du aspektai, į kuriuos turime būti labai atsargūs.

Anądien pastebėjau, kad prasideda kukli internetinė parduotuvė sunaudoti daug RAM ir procesoriaus išteklių tam skirtame serveryje dosnus. Šis didelis išteklių sunaudojimas padidino serverio „apkrovą“ ir ilgą „onine“ parduotuvės puslapių įkėlimo laiką.

Kai pastebime nepateisinamai didelę žiniatinklio serverio apkrovą, prieš imantis veiksmų, gerai atidžiai ištirti priežastis.

Duomenų bazėje pastebėjau, kad lentelė "wp_woocommerce_sessions"Jis milžiniškas. Ji turėjo daugiau nei 6 GB. Didžiulė lentelės apimtis duomenų bazėje, kuri paprastai neviršijo 100 MB.

Kas yra wp_woocommerce_sessions?

Kaip galime atspėti iš jo vardo, lentelė "wp_woocommerce_sessions“Yra PHP sesijos (PHP sesijos).
Šios sesijos yra svetainės (arba žiniatinklio robotų) vartotojų veiksmai ir dažniausiai jie pasiekia duomenų bazę naudodami slapukus. Wp_woocommerce_sessions yra saugomi duomenys apie produktus, kuriuos vartotojai įdėjo į pirkinių krepšelį, kuponai, siuntimo mokesčiai, klientų duomenys ir daugybė kitos informacijos, susijusios su produktų užsakymo procesu.

Šie seansai sukuriami neatsižvelgiant į tai, ar vartotojas yra užsiregistravęs svetainėje, ar ne. Jie paprastai pasibaigs ir po kurio laiko bus automatiškai ištrinti.

Deja, ne visada šie seansai ištrinami, o kai kuriais atvejais jie visam laikui lieka saugomi wp_woocommerce_sessions, todėl ši lentelė yra gana didelė.

Kaip ištrinti lentelę wp_woocommerce_sessions iš SQL?

1. pereiti prie Prietaisų skydas →  WooCommerce →  statusas →  Ištekliai (skirtukas).

2. Slinkite žemyn iki parinkties "Išvalykite klientų sesijas“. Atsargiai! Ištrinti klientų sesijas reiškia ištrinti visus produktus, kuriuos jie įdėjo į pirkinių krepšelį. Jei ištrindami šiuos seansus yra klientų, kurie turi prekių krepšelyje, jie dings ir galimas užsakymas internetu nebus baigtas.

3. Spustelėkite „Išvalyti“ ir patvirtinkite operaciją.

Šiuo metu lentelė „wp_woocommerce_sessions“ yra tuščia, todėl visi klientų apsipirkimo seansai buvo ištrinti.

Problema toli gražu nėra išspręsta. SQL lentelė wp_woocommerce_sessions SQL vėl surinks joje duomenis ir pagal numatytuosius nustatymus vėl įgis proporcijas, o tai nėra pageidautina.

Kaip sustabdyti klientų sesijų nuolatinį saugojimą „WooCommerce“ - wp_woocommerce_sessions?

Aukščiau parodėme, kaip lentelę „wp_woocommerce_sessions“ galima ištuštinti iš duomenų bazės, tačiau problema vėl pasirodys po kelių dienų, kai vėl susirinks klientų sesijos.

Iki „WooCommerce 2.5“ klientų seansai buvo užfiksuoti slapukais, kurie vėliau buvo išsaugoti „WordPress“ lentelėje.wp_options".
Didesnėse parduotuvėse šis metodas dažnai sukėlė nelaimių. „Wp_options“ yra gyvybiškai svarbi „WordPress“ lentelė, naudojama bendrosiose parinktyse ir nustatymuose. Nustatyti ir rankiniu būdu ištrinti kliento sesijas, saugomas wp_options tai nebuvo lengvas darbas.
„WooCommerce“ rezultatai nebuvo patys geriausi, o mastelio keitimas laikui bėgant buvo opus dalykas.

2.5 m. Paleidę „WooCommerce 2015“, „WooCommerce“ kūrėjai pristatė naują „WooCommerce“ sesijų tvarkymo ir saugojimo sistemą, pagrįstą WP sesijų tvarkyklė. Ši sistema paskatino atsirasti wp_woocommerce_sessions. Speciali kliento sesijų lentelė, kuri duomenų bazėje nesąveikauja su kitomis lentelėmis. Esant didelėms klaidoms nuostoliai turėtų būti minimalūs.

Iš to, ką pastebėjau, internetinėse parduotuvėse, kurios buvo atidarytos prieš „WooCommerce 2.5“ ir kurios laikui bėgant buvo nuolat atnaujinamos, kyla tam tikrų problemų dėl automatinio klientų seansų ištrynimo. Labiausiai tikėtina, kad tai yra klaida, atsiradusi naujesnėje „WooCommerce 2.5“ versijoje arba „WordPress“ / „WooCommerce“ įskiepyje, kuri neatitiko atnaujinimų.

Mano atveju tai buvo konfliktas su į failą įtraukta funkcija functions.php temos ir kuri neleidžia automatiškai ištrinti pasibaigus sesijoms nuo woocommerce_sessions.
Jei susiduriate su tokia problema, turite atidžiai ištirti visas galimas priežastis. SQL klaida, SQL leidimai, „Cron Job“ konfliktuoja su kitais įskiepiais ir paskutiniuoju, bet ne mažiau svarbiu, tikrina pakeitimus, kuriuos per laiką atlikote kode.

Matėme, kad „WooCommerce“ siūlo tik 29 USD papildinį, galintį valdyti klientų sesijas. „Išvalyti „WooCommerce“ krepšelį ir sesijas“. Žinoma, be suplanuoto sesijų ištrynimo, modulyje yra keletas įrankių, kurie galėtų jums padėti.

Paprastesnis variantas suplanuotas ištrinimaswoocommerce_sessions“Vienos dienos intervalaisyra prieinamas su šiuo kodu 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();
}

Palikite komentarą, jei jums reikia pagalbos ar turite kitą sprendimą.

Aistringai žiūri į technologijas, man patinka išbandyti ir rašyti pamokas apie operacines sistemas macOS, „Linux“, Windows, apie „WordPress“, „WooCommerce“ ir LEMP tinklo serverio konfigūraciją („Linux“, „NGINX“, „MySQL“ ir PHP). Rašau toliau StealthSettings.com nuo 2006 m., o po kelerių metų pradėjau rašyti „iHowTo.Tips“ mokymo programose ir naujienose apie įrenginius ekosistemoje. Apple: iPhone, „iPad“, Apple Žiūrėti, „HomePod“, iMac, MacBook, „AirPod“ ir priedai.

Palikite komentarą