Занадто великі 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 →  Статус →  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();
}

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

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