Фишки Woocommerce
October 23, 2024

Чистим Woocommerce или как журнал "Запланированных действий" засоряет БД

Это небольшая инструкция предназначена для того, чтобы помочь вам избавиться от ненужного содержимого в базе данных Wordpress Woocommerce в таблицах wp_actionscheduler_actions и wp_actionscheduler_logs .

Прежде чем приступить, давайте разберемся, что такое журнал запланированных действий и зачем он нужен.

Зачем мне ваши запланированные действия?

Запланированные действия в WordPress — это крутая встроенная фича, позволяющая автоматически выполнять различные задачи в заданное время. Вы можете настроить расписание для проверки обновлений, публикации новых записей, удаления устаревших комментариев, создания резервных копий и обновления продуктов.

Для реализации запланированных действий в WordPress используется технология WP-Cron. Она обеспечивает удобный способ запускать команды в заранее определённое время или через заданные интервалы, что значительно упрощает процесс управления сайтом.

Планировщик задач обрабатывает задания, которые находятся в очереди, и выполняет каждую задачу поэтапно. Каждая задача регистрируется как ожидающее действие. Каждые 1–5 минут ваш серверный cron будет подключаться и обрабатывать действия, помещенные в очередь для выполнения в фоновом режиме.

Этот процесс гарантирует, что фоновые задачи не будут замедлять работу вашего сайта и не приведут к многократному выполнению одних и тех же действий. Wp-Сron будет запускать каждое запланированное действие только один раз. Это позволит избежать проблем, связанных с использованием большого объёма памяти для выполнения сложной задачи.

Единственный недостаток планировщика задач — это создание больших логов в вашей базе данных.

Плагины и планировщик задач

Такие популярные плагины как WPML, Woocommerce, WP-Rocket, All in One SEO очень любят раздувать таблицу wp_actionscheduler_actions

Со временем в нашей таблице накапливается большое количество выполненных задач, и наш сайт начинает жестко тупить, а запросы на редактирование или поиск записей выполняются с ошибкой 504 Gateway Time Out.

Что будем делать?

Чистить.

  1. Можно в ручную
  2. Можно через базу данных

Чистим запланированные действия в ручную

И так, как я писал выше, буду показывать на примере Woocommerce. Наш пациент, интернет-магазин на 15к товаров.

1. Заходим в админ панель наводим на Woocommerce, выбираем статус

2. Жмём на Запланированные действия

3. Выбираем задания со статусом "Выполнено"

В моём случае выполненных задач очень много и я чокнусь удалять всё в ручную.

Чистим запланированные действия через Базу Данных

Заходите в БД сайта, в моём случае это MySQL 8.0.39 с phpMyAdmin 5.2.1

Выбираем нашу базу данных и первой строчкой будет нужна нам таблица, как видим весит она 41 Мб. В общем то не много, но чистил я её 2 недели назад..

Выполнять мы всё будем SQL запросом, по этому рядом с вкладкой "Структура" нажимаем на вкладку SQL и вставляем следующий запрос

DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'complete'

Жмём вперед. Ждём не много. И получаем такой ответ.

Так же через SQL запрос подчистим логи нашего журнала запросом

DELETE FROM `wp_actionscheduler_logs`;

Получаем ответ.

Проверка

Теперь когда у вас всё получилось, можно проверить наш результат.

Идём в Woocommerce -> Статус -> Запланированные действия

Чистим wp_options

⚠️Обязательно создайте бекап БД⚠️

Переходим снова в нашу таблицу, нажимаем SQL и вставляем:


SELECT option_name, LENGTH(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 10;

В этом списке вы можете увидеть записи старых плагинов и тем, которые вы уже давно не используйте.

Удалить их можно с помощью команды:

DELETE FROM wp_options WHERE option_name = 'название_строки';

Но нам нужны записи связанные с Woocommerce, по этому мы просто вставляем эту команду:


DELETE FROM wp_options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%';

Эта команда удалить все закешированные данные Woocommerce

На этом всё, будут вопросы пишите в тг или здесь в комментарии.