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

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

Pro internetový obchod velikosti modeste WooCommerce lze jej provozovat i na „sdíleném hostingu“, přičemž dokáže bez problémů podporovat 5.000 100 produktů / XNUMX objednávek denně, pokud použité téma nespotřebovává mnoho zdrojů a nezneužíváte další 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 internetový obchod velikostí modezačíná to 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 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ů webových stránek (nebo webových robotů) a většinou se dostanou do databáze prostřednictvím souborů cookie. v wp_woocommerce_sessions jsou uložená data o produktech umístěných uživateli do nákupního košíku, kuponech, poplatcích za dopravu, zákaznických údajích a mnoho dalších informací souvisejících s procesem objednává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 se tyto relace odstraní a v některých případech zůstanou trvale uloženy ve wp_woocommerce_sessions, díky čemuž tato tabulka dosahuje poměrně velkého objemu.

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 tuto chvíli je tabulka "wp_woocommerce_sessions" je prázdný, takže všechny nákupní relace zákazníků byly smazány.

Problém není zdaleka vyřešen. SQL tabulka wp_woocommerce_sessions v něm bude znovu shromažďovat data a standardně opět získá proporce, což není žádoucí.

Jak zabráníme trvalému ukládání klientských relací WooCommerce - wp_woocommerce_sessions?

Výše jsem ukázal, jak tabulka "wp_woocommerce_sessions" z databáze, ale problém se znovu objeví po několika dnech, kdy se klientské relace znovu shromáždí.

Před WooCommerce 2.5 byly klientské relace zachyceny prostřednictvím souborů cookie, které byly později uloženy 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 nebyly nejlepší a škálovatelnost v čase byla citlivým bodem.

Se zahájením WooCommerce 2.5 v roce 2015, vývojáři WooCommerce představil nový systém pro manipulaci a ukládání relací WooCommerceNa základě 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 pozoroval, byly internetové obchody spuštěny již dříve 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 plugin WordPress / WooCommerce která nedržela 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ěl jsem, že WooCommerce nabízí za pouhých 29 $ plugin schopný spravovat zákaznické relace. "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ář.

Věnovaný technologiím, s radostí píši na StealthSettings.com od roku 2006. Mám bohaté zkušenosti s operačními systémy: macOS, Windows a Linux, stejně jako s programovacími jazyky a platformami pro blogování (WordPress) a pro online obchody (WooCommerce, Magento, PrestaShop).

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

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ář