Příliš velké wp_woocommerce_sessions v databázi [Jak opravit]

Jak jsem řekl v jiných článcích, WooCommerce je stále robustnější a flexibilnější modul, který se dokáže transformovat WordPress intr-un Ideální internetový obchod pro začínající podnik.

Pro skromný internetový obchod lze WooCommerce provozovat na „sdíleném hostingu“ a může snadno podporovat 5.000 100 produktů / XNUMX objednávek denně, pokud použité téma nespotřebovává mnoho zdrojů a nezneužívá jiné moduly (pluginy).

Optimalizace zdrojového kódu z (WP Themes), modulů (WP Plugins) a optimalizace databáze existují také dva aspekty, na které musíme být velmi opatrní.

Nedávno jsem si všiml, že začíná skromný online obchod spotřebovávat enormně mnoho zdrojů RAM a CPU na dedikovaném serveru štědrý. Tato vysoká spotřeba zdrojů vedla ke zvýšenému „načtení“ na serveru a dlouhé době načítání stránek onine store.

Když si všimneme neoprávněně vysokého zatížení webového serveru, je dobré pečlivě prozkoumat příčiny, než podniknete jakékoli kroky.

V databázi jsem si všiml, že tabulka „wp_woocommerce_sessions"Je to obrovské. Měl přes 6 GB. Obrovský objem tabulky v databázi, který za normálních okolností celkem nepřesáhl 100 MB.

Co je to wp_woocommerce_sessions?

Jak můžeme uhodnout z jeho jména, tabulka "wp_woocommerce_sessions„Obsahuje relace PHP (Session PHP).
Tyto relace jsou akce uživatelů webu (nebo webových robotů) a většinou se dostanou do databáze prostřednictvím souborů cookie. Ve wp_woocommerce_sessions jsou uložena data o produktech vložených uživateli do nákupního košíku, kupóny, poplatky za dopravu, údaje o zákaznících a mnoho dalších informací souvisejících s procesem objednání produktu.

Tyto relace se vytvářejí bez ohledu na to, zda je uživatel na webu registrován, nebo nikoli, a obvykle by měl po chvíli automaticky vypršet a odstranit.

Bohužel ne vždy platí, že jsou tyto relace smazány a v některých případech zůstávají trvale uloženy ve wp_woocommerce_session, což činí tuto tabulku poměrně velkou.

Jak odstranit tabulku wp_woocommerce_sessions z SQL?

1. Přejít na Hlavní obrazovka →  WooCommerce →  Status →  Tools (záložka).

2. Přejděte dolů na možnost „Vymazat relace se zákazníkem“. Pozor! Smazání relace se zákazníkem znamená smazání všech produktů, které vložili do nákupního košíku. Pokud při mazání těchto relací existují zákazníci, kteří mají produkty v košíku, zmizí a možná online objednávka nebude dokončena.

3. Klikněte na „Vymazat“ a potvrďte operaci.

V tomto okamžiku je tabulka „wp_woocommerce_sessions“ prázdná, takže byly odstraněny všechny relace nakupování zákazníků.

Problém zdaleka není vyřešen. Tabulka wp_woocommerce_session SQL v ní znovu shromáždí data a ve výchozím nastavení znovu získá proporce, což není žádoucí.

Jak zastavíme trvalé ukládání relací zákazníků ve WooCommerce - wp_woocommerce_sessions?

Výše jsme ukázali, jak lze tabulku „wp_woocommerce_sessions“ vyprázdnit z databáze, ale problém se znovu objeví po několika dnech, kdy se relace zákazníků znovu shromáždí.

Před WooCommerce 2.5 byly zákaznické relace zachycovány prostřednictvím souborů cookie a poté ukládány do tabulky. WordPress "wp_options".
U větších obchodů tato metoda často vedla ke katastrofám. "Wp_options"Být životně důležitým stolem." WordPress, používané obecnými možnostmi a nastaveními. Identifikace a ruční odstranění klientských relací uložených v wp_options nebyla to snadná práce.
Výkon WooCommerce nebyl nejlepší a škálovatelnost v čase byla citlivým bodem.

Se spuštěním WooCommerce 2.5 v roce 2015 představili vývojáři WooCommerce nový systém zpracování a ukládání relací WooCommerce založený na Správce relací WP. Tento systém vedl ke vzniku wp_woocommerce_sessions. Vyhrazená tabulka pro relace klienta, která v databázi neinteraguje s jinými tabulkami. V případě velkých chyb by ztráty měly být minimální.

Z toho, co jsem viděl, internetové obchody spuštěné před WooCommerce 2.5 a které v průběhu času dostávaly neustálé aktualizace, mají určité problémy s automatickým mazáním klientských relací. S největší pravděpodobností se jedná o chybu, která se objevila na novější verzi WooCommerce 2.5 nebo pluginu WordPress / WooCommerce, který nedržel krok s aktualizacemi.

V mém případě to byl konflikt s funkcí přidanou do souboru functions.php tématu a které zabraňuje automatickému mazání po době relací, jejichž platnost vypršela z woocommerce_sessions.
Pokud takovému problému čelíte, musíte pečlivě prozkoumat všechny možné příčiny. Chyba SQL, oprávnění SQL, Cron Job, konflikty s jinými pluginy a v neposlední řadě zkontrolujte změny, které jste v kódu provedli v průběhu času.

Viděli jsme, že WooCommerce nabízí za pouhých 29 $ plugin schopný spravovat relace se zákazníkem. "Vymazat košík a relace pro WooCommerce“. Kromě plánovaného mazání relací má modul samozřejmě několik nástrojů, které vám mohou pomoci.

Jednodušší možnost plánované smazání „woocommerce_sessions"V jednodenních intervalech.", je k dispozici s následujícím kódem 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();
}

Pokud potřebujete pomoc nebo jiné řešení, zanechte komentář.

jak na to » Vylepšení a hacky » Příliš velké wp_woocommerce_sessions v databázi [Jak opravit]

Vášnivý k technologii, rád testuji a píšu výukové programy o operačních systémech macOS, Linux, Windows, o WordPress, WooCommerce a konfigurace webových serverů LEMP (Linux, NGINX, MySQL a PHP). píšu dál StealthSettings.com od roku 2006 ao několik let později jsem začal psát na iHowTo.Tips výukové programy a novinky o zařízeních v ekosystému Apple: iPhone, iPad, Apple Hodinky, HomePod, iMac, MacBook, AirPods a příslušenství.

1 myšlenka na „Příliš velké wp_woocommerce_sessions v databázi [Jak opravit]“

  1. Nemám jak smazat data váží 500mb a mám limit 1000mb za minutu smazat vše je zase kompletně vyplněno... .nějaké řešení?

    odpověď

Zanechat komentář