Занадто великий wp_woocommerce_sessions у базі даних [Як виправити]

Як я вже говорив в інших статтях, WooCommerce це все більш надійний і гнучкий модуль, здатний трансформуватися WordPress в Ідеальний інтернет-магазин для стартового бізнесу.

Для інтернет-магазину розмір modeст WooCommerce його також можна запускати на «загальному хостингу», маючи можливість легко підтримувати 5.000 продуктів / 100 замовлень на день, якщо використовувана тема не споживає багато ресурсів і ви не зловживаєте іншими модулями (плагінами).

Оптимізація вихідного коду Теми WP, модулі (плагіни WP) та оптимізація баз даних є також два аспекти, щодо яких нам слід бути дуже обережними.

Днями помітив, що інтернет-магазин розмірів modeпочинається споживати надзвичайно багато ресурсів оперативної пам’яті та CPU на виділеному сервері щедрий. Це велике споживання ресурсів призвело до збільшення "навантаження" на сервер і тривалого часу завантаження сторінок онлайн-магазину.

Коли ми помічаємо невиправдано велике навантаження на веб-сервер, добре ретельно вивчити причини, перш ніж вживати будь-які дії.

У базі даних я помітив, що таблиця "wp_woocommerce_sessions"Це величезно. Він містив понад 6 ГБ. Величезний обсяг таблиці в базі даних, яка загалом не перевищувала 100 МБ.

що таке wp_woocommerce_сесії ?

Як ми можемо здогадатися з його імені, таблиця "wp_woocommerce_sessions”Містить сесії PHP (Сесії PHP).
Ці сеанси є діями користувачів веб-сайту (або веб-роботів), і в більшості випадків вони потрапляють до бази даних через файли cookie. в wp_woocommerce_sessions зберігають дані про продукти, розміщені користувачами в кошику для покупок, купони, вартість доставки, дані клієнтів і багато іншої інформації, пов’язаної з процесом замовлення продукту.

Ці сеанси створюються незалежно від того, зареєстрований користувач на сайті чи ні, і зазвичай вони закінчуються та автоматично видаляються через деякий час.

На жаль, не завжди буває, що ці сеанси видаляються, а в деяких випадках вони залишаються назавжди збереженими в wp_woocommerce_sessions, завдяки чому ця таблиця досягає досить великого обсягу.

Як видалити таблицю wp_woocommerce_sessions з SQL?

1. До Інформаційна панель →  WooCommerce →  Статус →  Tools (вкладка).

2. Прокрутіть вниз до опції "Чіткі сесії клієнтів“. Обережно! Видалення сесій клієнтів означає видалення всіх продуктів, які вони поміщають у кошик для покупок. Якщо під час видалення цих сеансів є клієнти, у яких є товари у кошику, вони зникнуть, і можливе замовлення в Інтернеті не буде завершено.

3. Клацніть «Очистити» та підтвердьте операцію.

У цей момент таблиця "wp_woocommerce_sessions" порожній, тому всі сеанси покупок клієнта видалено.

Проблема ще далека від вирішення. Таблиця SQL wp_woocommerce_sessions знову збере в нього дані і за замовчуванням він знову отримає пропорції, що небажано.

Як зупинити постійне зберігання сеансів клієнта WooCommerce - wp_woocommerce_sessions?

Вище я показав, як таблиця "wp_woocommerce_sessions» з бази даних, але проблема з’явиться знову через кілька днів, коли клієнтські сесії знову зберуться.

До WooCommerce 2.5, клієнтські сеанси були зафіксовані через файли cookie, які пізніше зберігаються в таблиці WordPress "wp_options».
Для великих магазинів цей метод часто призводив до катастроф. “Wp_options«Будучи життєвою таблицею WordPress, використовується загальними параметрами та налаштуваннями. Визначення та вручну видалення клієнтських сеансів, збережених у wp_options це була нелегка робота.
виступу WooCommerce вони не були найкращими, а масштабованість з часом була чутливою точкою.

З запуском WooCommerce 2.5 2015 року, розробники WooCommerce представив нову систему обробки та зберігання сеансів WooCommerce, Заснований на Менеджер сеансів WP. Ця система призвела до появи wp_woocommerce_sessions. Спеціальна таблиця для сесій клієнта, яка в базі даних не взаємодіє з іншими таблицями. У разі великих помилок втрати повинні бути мінімальними.

З того, що я бачив, інтернет-магазини були запущені раніше WooCommerce 2.5, які отримували постійні оновлення з часом, мають певні проблеми щодо автоматичного видалення сеансів клієнта. Швидше за все, це помилка, яка виникла в новішій версії WooCommerce 2.5 або плагін WordPress / WooCommerce який не встигав за оновленнями.

У моєму випадку це був конфлікт із функцією, доданою до файлу functions.php теми, а яка запобігає автоматичному видаленню після закінчення сеансів із woocommerce_sessions.
Якщо ви зіткнулися з такою проблемою, ви повинні ретельно вивчити всі можливі причини. Помилка SQL, дозволи SQL, завдання Cron, конфлікти з іншими плагінами і, нарешті, перевірка змін, внесених вами в коді з часом.

я побачив, що WooCommerce пропонує лише за 29 доларів США плагін, здатний керувати сеансами клієнтів. "Очистити кошик і сесії для WooCommerce“. Звичайно, крім запланованого видалення сесій, модуль має кілька інструментів, які можуть вам допомогти.

Більш простий варіант заплановане видалення “woocommerce_sessions”З інтервалом в один день, доступний з таким кодом у 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();
}

Залиште коментар, якщо вам потрібна допомога або інше рішення.

Захоплений технологіями, з 2006 року з радістю пишу на StealthSettings.com. Маю багаторічний досвід роботи з операційними системами: macOS, Windows і Linux, а також з мовами програмування і платформами для блогів (WordPress) та онлайн-магазинів (WooCommerce, Magento, PrestaShop).

Як записатися » Твіки та хакі » Занадто великий wp_woocommerce_sessions у базі даних [Як виправити]

1 думка про “Занадто великий wp_woocommerce_sessions in Database [Як виправити]"

  1. У мене немає можливості видалити дані, які важать 500 МБ, і я маю обмеження в 1000 Мб на хвилину, щоб видалити все, знову повністю заповнено… .деяке рішення?

    відповісти
Залишити коментар