Слишком большие wp_woocommerce_sessions в базе данных [Как исправить]

Как я уже говорил в других статьях, WooCommerce - это все более надежный и гибкий модуль, способный превратить WordPress в Идеальный интернет-магазин для начинающего бизнеса.

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

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

Заметил на днях, что скромный интернет-магазин запускается потреблять много ресурсов ОЗУ и ЦП на выделенном сервере щедрый. Такое высокое потребление ресурсов привело к повышенной «нагрузке» на сервер и долгому времени загрузки страниц интернет-магазина.

Когда мы замечаем неоправданно высокую нагрузку на веб-сервер, рекомендуется тщательно изучить причины, прежде чем предпринимать какие-либо действия.

В базе я заметил, что таблица "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 долларов плагин, способный управлять сеансами клиентов. «Очистить корзину и сеансы для 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();
}

Оставьте комментарий, если вам нужна помощь или есть другое решение.

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

Оставьте комментарий