Чистим 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.
Что будем делать?
Чистим запланированные действия в ручную
И так, как я писал выше, буду показывать на примере 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
На этом всё, будут вопросы пишите в тг или здесь в комментарии.