Каждый сайт на WordPress со временем накапливает массу лишних данных: ревизии постов, спам-комментарии, устаревшие транзиенты, а также записи в таблицах, которые уже не нужны. Все это увеличивает размер базы данных, замедляет работу сайта и повышает нагрузку на сервер. В этой статье разберём, как правильно и безопасно оптимизировать базу данных WordPress, удаляя ненужные данные и уменьшая её размер, а также рассмотрим примеры полезных плагинов и собственных функций для автоматизации процесса.
Почему важно оптимизировать базу данных WordPress
База данных — это сердце вашего сайта, в ней хранится весь контент, настройки, метаданные и пользовательская информация. Со временем из-за постоянных правок, обновлений и взаимодействий, база разрастается, и накапливаются «мусорные» данные, такие как:
- Ревизии записей — каждое сохранение создаёт новую версию, которые редко удаляются;
- Автосохранения — временные данные, которые могут оставаться после завершения работы;
- Спам и невалидные комментарии;
- Устаревшие транзиенты — временные опции, которые не удалились после истечения срока;
- Данные плагинов, которые уже не используются.
Без регулярной очистки и оптимизации это приводит к замедлению запросов к базе, увеличению времени загрузки страниц и нагрузке на сервер. Особенно это критично для сайтов с большим объёмом контента или на хостингах с ограниченными ресурсами.
Плагины для оптимизации базы данных WordPress
Для большинства пользователей удобнее всего использовать готовые решения. Вот несколько проверенных плагинов, которые помогут быстро и безопасно очистить базу:
1. WP-Optimize
Один из самых популярных плагинов для очистки базы данных и оптимизации таблиц. Позволяет удалять ревизии, спам, устаревшие транзиенты и многое другое. Также умеет сжать изображения и кешировать страницы.
Для установки просто найдите WP-Optimize в репозитории WordPress.
2. Advanced Database Cleaner
Этот плагин даёт возможность более тонко контролировать очистку — можно удалять старые черновики, ревизии, временные таблицы плагинов, а также планировать автоматическую очистку.
Ссылка для скачивания: Advanced Database Cleaner.
Удаление ревизий и автосохранений через код
Если вы предпочитаете не использовать плагины, можно добавить в functions.php вашей темы или в отдельный плагин следующий код для удаления ревизий и автосохранений:
function wpelement_delete_old_revisions() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'auto-draft'");
}
add_action('admin_init', 'wpelement_delete_old_revisions');
Этот код удалит все ревизии и автосохранения при заходе в админ-панель. Однако используйте с осторожностью — лучше запускать один раз и потом отключить.
Удаление устаревших транзиентов
Транзиенты — временные опции, которые плагинам и теме нужны для кэширования данных. Иногда старые транзиенты не удаляются автоматически, что засоряет базу. Для удаления всех просроченных транзиентов используйте такой код:
function wpelement_delete_expired_transients() {
global $wpdb;
$time = time();
$transients = $wpdb->get_col(
"SELECT option_name FROM {$wpdb->options}
WHERE option_name LIKE '_transient_%'"
);
foreach ( $transients as $transient ) {
if ( preg_match('/_transient_timeout_(.+)/', $transient, $matches) ) {
$timeout = get_option( $transient );
if ( $timeout !== false && $timeout < $time ) {
delete_option( str_replace('_transient_timeout_', '_transient_', $transient) );
delete_option( $transient );
}
}
}
}
add_action('admin_init', 'wpelement_delete_expired_transients');
Этот код ищет все транзиенты и удаляет те, у которых время жизни истекло.
Оптимизация таблиц базы данных
После удаления ненужных данных важно провести оптимизацию таблиц, что позволит очистить фрагментированные участки и улучшить производительность.
Для этого можно использовать SQL-запрос:
function wpelement_optimize_tables() {
global $wpdb;
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
foreach ($tables as $table) {
$wpdb->query('OPTIMIZE TABLE ' . $table[0]);
}
}
add_action('admin_init', 'wpelement_optimize_tables');
Запустите этот код один раз в админке, а затем отключите. Оптимизация помогает снизить размер базы и ускорить запросы.
Удаление данных неактивных плагинов
Многие плагины при удалении оставляют свои таблицы и записи в базе. Чтобы найти и удалить такие данные, можно использовать плагин Advanced Database Cleaner, который умеет сканировать базу и показывать остатки от удалённых плагинов.
Также можно написать свой SQL-запрос, но тут нужна аккуратность и понимание структуры базы.
Автоматизация очистки базы данных
Для поддержания базы в чистом состоянии полезно настроить автоматическую очистку. Вот пример функции, которая будет удалять ревизии и спам-комментарии по расписанию раз в неделю:
function wpelement_schedule_database_cleanup() {
if (! wp_next_scheduled( 'wpelement_weekly_cleanup' )) {
wp_schedule_event(time(), 'weekly', 'wpelement_weekly_cleanup');
}
}
add_action('wp', 'wpelement_schedule_database_cleanup');
function wpelement_do_weekly_cleanup() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
}
add_action('wpelement_weekly_cleanup', 'wpelement_do_weekly_cleanup');
Такой подход позволяет не забывать про очистку и поддерживать базу в хорошем состоянии без лишних усилий.
Выводы и рекомендации
Оптимизация базы данных — обязательная часть обслуживания WordPress-сайта. Используйте для этого проверенные плагины или собственные функции, внимательно тестируйте изменения на тестовом сервере. Не забывайте регулярно делать резервные копии перед любыми операциями с базой.
Для пользователей плагинов из WPShop — например, Clearfy Pro — стоит проверить наличие встроенных инструментов оптимизации базы, которые могут значительно облегчить процесс.