Per didelis wp_woocommerce_sessions duomenų bazėje [kaip pataisyti]

Kaip sakiau kituose straipsniuose, WooCommerce tai vis tvirtesnis ir lankstesnis modulis, galintis transformuotis WordPress į Ideali internetinė parduotuvė pradedančiam verslui.

Dydžio internetinei parduotuvei modeste WooCommerce jis taip pat gali būti paleistas „bendrajame priegloboje“, galintis lengvai palaikyti 5.000 produktų / 100 užsakymų per dieną, jei naudojama tema neeikvoja daug resursų ir nepiktnaudžiaujate kitais moduliais (įskiepiais).

Š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.

Kitą dieną pastebėjau, kad dydžių internetinė parduotuvė modeprasideda sunaudoti nepaprastai daug RAM išteklių ir CPU 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_sesijos?

Kaip galime atspėti iš jo vardo, lentelė "wp_woocommerce_sessions“Yra PHP sesijos (PHP sesijos).
Šios sesijos yra svetainės naudotojų (arba žiniatinklio robotų) veiksmai ir dažniausiai jie pasiekia duomenų bazę per slapukus. wp_woocommerce_sesijos yra saugomi duomenys apie vartotojų į pirkinių krepšelį įdėtas prekes, kuponus, pristatymo mokesčius, klientų duomenis ir daug kitos su prekių užsakymo procesu susijusios informacijos.

Š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 šios sesijos ištrinamos ir kai kuriais atvejais išlieka visam laikui saugomos wp_woocommerce_sessions, todėl ši lentelė pasiekia gana didelę apimtį.

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ščias, todėl visi klientų apsipirkimo seansai buvo ištrinti.

Problema toli gražu neišspręsta. SQL lentelė wp_woocommerce_sessions vėl rinks duomenis ir pagal numatytuosius nustatymus vėl gaus proporcijas, o tai nepageidautina.

Kaip neleisti, kad klientų seansai būtų visam laikui saugomi WooCommerce - wp_woocommerce_sessions?

Aukščiau parodžiau, kaip lentelė "wp_woocommerce_sessions“ iš duomenų bazės, tačiau problema vėl pasirodys po kelių dienų, kai klientų seansai vėl susirinks.

Prieš WooCommerce 2.5, klientų seansai buvo užfiksuoti naudojant slapukus, kad vėliau būtų išsaugoti lentelėje WordPress "wp_options".
Didesnėms parduotuvėms šis metodas dažnai privesdavo prie nelaimių. „Wp_options„Būti gyvybiškai svarbiu stalu WordPress, naudojamas bendrosiose parinktyse ir nustatymuose. Identifikuoti ir rankiniu būdu ištrinti kliento seansus, saugomus wp_options tai nebuvo lengvas darbas.
Spektaklis WooCommerce jie nebuvo patys geriausi, o mastelio keitimas laikui bėgant buvo jautrus dalykas.

Su starto WooCommerce 2.5 2015 m., kūrėjai WooCommerce pristatė naują seansų tvarkymo ir saugojimo sistemą WooCommerceremiantis 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ės parduotuvės pradėjo veikti anksčiau WooCommerce 2.5 ir kurie laikui bėgant buvo nuolat atnaujinami, turi tam tikrų problemų dėl automatinio kliento seansų ištrynimo. Greičiausiai tai yra klaida, kuri atsirado naujesnėje versijoje WooCommerce 2.5 arba papildinys WordPress / WooCommerce kuri neatsiliko nuo 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.

Aš tai mačiau WooCommerce siūlo tik už 29 USD papildinį, galintį valdyti klientų seansus. “Išvalyti krepšelį ir seansus WooCommerce“. Ž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ą.

Technologijų entuziastas, nuo 2006 metų su malonumu rašau „StealthSettings.com“. Turiu išsamią patirtį su operacinėmis sistemomis: macOS, „Windows“ ir „Linux“, taip pat programavimo kalbomis ir blogo platformomis („WordPress“) bei internetinės parduotuvės platformomis („WooCommerce“, „Magento“, „PrestaShop“).

kaip » „Tweaks & Hacks“ » Per didelis wp_woocommerce_sessions duomenų bazėje [kaip pataisyti]

1 mintis apie „Per didelis wp_woocommerce_sessions duomenų bazėje [kaip pataisyti]"

  1. Negaliu ištrinti duomenų, sveria 500 mb ir turiu 1000 mb per minutę apribojimą ištrinti, viskas vėl pilnai užpildyta... .koks nors sprendimas?

    atsakymas
Palikite komentarą