База данных WordPress со временем накапливает множество избыточных данных: ревизии постов, комментарии спама, временные опции и многое другое. Это приводит к замедлению работы сайта, увеличению объема бэкапов и нагрузке на сервер. В этой статье мы подробно разберём, как оптимизировать базу данных WordPress, удаляя ненужные данные и сохраняя при этом безопасность и целостность сайта.
Почему важно оптимизировать базу данных WordPress?
Каждый раз, когда вы редактируете запись, WordPress сохраняет её ревизию. За месяц активной работы их может накопиться сотни, если не тысячи. Аналогично, комментарии могут содержать спам, а временные данные (transients) часто остаются в базе и занимают место. В сумме это тормозит SQL-запросы и увеличивает время отклика.
Оптимизация помогает:
- Уменьшить размер базы данных;
- Ускорить ответы сервера на запросы;
- Сократить время резервного копирования;
- Обеспечить более стабильную работу при высоких нагрузках.
Регулярное обслуживание базы данных — залог здоровья вашего сайта.
Удаление ревизий и автосохранений в WordPress
По умолчанию WordPress сохраняет все ревизии публикаций, что удобно для восстановления, но влечёт за собой рост таблицы wp_posts. Для удаления старых ревизий можно использовать SQL-запрос или плагин. Рассмотрим оба варианта.
Удаление ревизий через плагин WP-Optimize
WP-Optimize — популярный плагин, который позволяет в один клик очистить ревизии, спам-комментарии, временные данные и оптимизировать таблицы базы данных.
После установки перейдите в раздел WP-Optimize → Database и выберите опции для очистки. Плагин безопасно удалит лишние данные и оптимизирует таблицы.
Удаление ревизий через SQL-запрос
Если вы предпочитаете работать напрямую с базой данных, используйте следующий SQL-запрос для удаления всех ревизий:
DELETE FROM wp_posts WHERE post_type = 'revision';Однако будьте осторожны и сделайте резервную копию базы перед выполнением.
Очистка спам-комментариев и корзины комментариев
Спам-комментарии могут быстро накапливаться и занимать место. WordPress хранит их в таблице wp_comments с статусом spam. Рекомендуется регулярно очищать их.
Удаление спам-комментариев через админку
В панели администратора перейдите в раздел «Комментарии», выберите фильтр «Спам», отметьте все и нажмите «Удалить навсегда».
Удаление спам-комментариев через SQL
DELETE FROM wp_comments WHERE comment_approved = 'spam';Также можно удалить комментарии из корзины:
DELETE FROM wp_comments WHERE comment_approved = 'trash';Удаление устаревших временных данных (transients)
Transients — временные данные, которые плагины и темы используют для кеширования. Иногда они не очищаются по истечении срока и засоряют базу.
Автоматическая очистка transients через плагин
Плагин Transient Manager позволяет просматривать и удалять устаревшие транзиенты.
Удаление транзиентов через PHP-функцию
Для автоматизации можно добавить в файл functions.php вашей темы следующий код:
function wpreboot_delete_expired_transients() {
global $wpdb;
$time = current_time('mysql');
$wpdb->query(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_value < '{$time}'"
);
}
add_action('wp_scheduled_delete', 'wpreboot_delete_expired_transients');Эта функция удалит просроченные транзиенты при запуске стандартного задания WordPress по очистке.
Оптимизация таблиц базы данных
После удаления лишних данных полезно оптимизировать таблицы, чтобы сжать их и улучшить производительность.
Оптимизация через phpMyAdmin
Войдите в phpMyAdmin, выберите базу данных, отметьте все таблицы и выберите «Оптимизировать таблицу».
Оптимизация с помощью WP-CLI
Если у вас есть доступ к командной строке сервера, используйте WP-CLI:
wp db optimizeКоманда оптимизирует все таблицы базы данных.
Создаем кастомную функцию для комплексной очистки базы данных
Для удобства можно написать собственную функцию, которая объединит все описанные операции.
function wpreboot_optimize_database() {
global $wpdb;
// Удаляем ревизии
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// Удаляем спам и корзину комментариев
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved IN ('spam', 'trash')");
// Удаляем устаревшие транзиенты
$time = current_time('mysql');
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->options} WHERE (option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%') AND option_value < %s",
$time
)
);
// Оптимизируем таблицы
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
foreach ($tables as $table) {
$wpdb->query('OPTIMIZE TABLE ' . $table[0]);
}
}
// Запуск функции по крону или вручную
// add_action('wp_scheduled_delete', 'wpreboot_optimize_database');Вы можете подключить эту функцию к крону WordPress или запускать вручную по необходимости.
Резервное копирование перед оптимизацией
Перед любыми изменениями в базе данных крайне важно сделать резервную копию. Это можно сделать через хостинг-панель, phpMyAdmin или плагины, например, UpdraftPlus.
Регулярное резервное копирование поможет избежать потери данных в случае ошибки или сбоя.
Заключение
Оптимизация базы данных WordPress — необходимая процедура для поддержания быстродействия и стабильности сайта. Используйте проверенные плагины, аккуратно работайте с SQL-запросами и не забывайте о резервном копировании. Такой подход поможет избежать проблем с производительностью и обеспечит комфортную работу как для вас, так и для посетителей сайта.