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

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

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

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

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

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

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

Що таке wp_woocommerce_sessions?

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

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

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

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

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

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 доларів плагін, здатний на це adminстрес-сеанси клієнта. “Очистити кошик та сеанси для 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();
}

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

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

Захоплюючись технологіями, я люблю тестувати та писати підручники про операційні системи macOS, Linux, Windows, про WordPress, WooCommerce і налаштувати веб-сервери LEMP (Linux, NGINX, MySQL і PHP). Я пишу далі StealthSettings.com з 2006 року, а через кілька років я почав писати на iHowTo.Tips підручники та новини про пристрої в екосистемі Apple: iPhone, iPad, Apple Годинник, HomePod, iMac, MacBook, AirPods та аксесуари.

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

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

    відповісти

Залишити коментар