Transienty в WordPress — это временные кэшированные данные, которые позволяют ускорить работу сайта, сохраняя результаты дорогостоящих операций на некоторое время. Однако иногда transienty не удаляются по истечении срока, накапливаются в базе данных и начинают тормозить сайт. В этой статье подробно разберём, как найти и автоматически удалять такие зависшие transienty, чтобы поддерживать базу данных в чистоте и повышать производительность.
Что такое transienty и почему они зависают
Transient API WordPress позволяет сохранять временные данные с определённым сроком действия. Например, кэш запросов к внешним сервисам, расчёты, результаты DB-запросов. После истечения срока transient должен удаляться автоматически с помощью WP-Cron. Но если WP-Cron отключён, настроен неправильно или сайт не получает достаточного трафика, удаление может не сработать.
Также transienty могут зависать из-за ошибок плагинов, некорректных запросов или сбойных процессов очистки. Зависшие transienty занимают место в таблице wp_options, замедляют выборки и увеличивают время отклика сайта.
Поэтому важно регулярно мониторить и очищать базу от таких данных.
Как найти зависшие transienty в базе данных
Все transient-ключи хранятся в таблице wp_options и имеют префиксы _transient_ и _transient_timeout_. Для поиска зависших transient можно использовать SQL-запросы к базе.
Пример запроса для поиска устаревших transient:
SELECT option_name FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();
Этот запрос возвращает все transienty, у которых время истечения уже прошло, но они ещё не удалены.
Для поиска самих значений transient по найденным ключам:
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '_transient_%';
Можно увидеть их количество и оценить масштабы проблемы.
Автоматическое удаление зависших transient с помощью WPReg_cron
Чтобы избежать накопления «мусорных» transient, можно настроить периодическую очистку с помощью WP-Cron. Если стандартный WP-Cron не работает надёжно, рекомендуем использовать плагин WPReg_cron для контроля и запуска задач в заданное время.
Ниже пример функции, которая удаляет все истёкшие transient из базы и которую можно запустить по расписанию:
function wpreg_remove_expired_transients() {
global $wpdb;
$time = time();
$expired = $wpdb->get_col(
$wpdb->prepare(
"SELECT option_name FROM $wpdb->options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < %d",
$time
)
);
if ( empty($expired) ) {
return;
}
foreach ( $expired as $timeout_key ) {
// Получаем ключ transient без префикса _transient_timeout_
$transient_key = str_replace('_transient_timeout_', '', $timeout_key);
// Удаляем transient и его время жизни
delete_transient($transient_key);
}
}
// Регистрируем функцию в хук WP-Cron
add_action('wpreg_cron_cleanup_transients', 'wpreg_remove_expired_transients');
// Пример добавления расписания при инициализации плагина или темы
if ( ! wp_next_scheduled('wpreg_cron_cleanup_transients') ) {
wp_schedule_event(time(), 'hourly', 'wpreg_cron_cleanup_transients');
}
Эта реализация удаляет все устаревшие transient каждый час. Для повышения надёжности используйте WPReg_cron, который гарантирует запуск задач без зависимости от посещаемости сайта.
Использование плагинов для очистки transient
Если хотите обойтись без кода, есть готовые решения:
- Transients Manager — позволяет просматривать, удалять и экспортировать transient прямо из панели администратора.
- Clearfy Pro — включает функции оптимизации базы данных, в том числе автоматическую очистку устаревших transient и других данных.
- WP-Optimize — комплексный плагин для очистки и оптимизации базы, поддерживает удаление transient.
Плагины хорошо подходят для регулярного обслуживания, но при больших сайтах с высокой нагрузкой рекомендуется добавить собственный механизм очистки через WP-Cron, как показано выше.
Как проверить, что transient очищаются корректно
После настройки автоматической очистки важно проверить, что transient действительно удаляются и база не растёт:
- Используйте SQL-запросы для мониторинга количества transient в базе.
- Проверяйте логи WP-Cron, если используете WPReg_cron, чтобы убедиться в выполнении задач.
- Тестируйте работу сайта на наличие ошибок кэширования и корректность отображения данных.
Если transientы не удаляются, проверьте корректность расписания WP-Cron и отключите плагины, которые могут конфликтовать с очисткой.
Заключение
Зависшие transienty — частая причина замедления сайтов на WordPress. Регулярная автоматическая очистка устаревших transient с помощью WP-Cron или специализированных плагинов помогает поддерживать базу в порядке и ускорять работу сайта.
Для удобства и надёжности рекомендую использовать WPReg_cron, а также контролировать состояние базы через SQL-запросы и плагины типа Clearfy Pro.