Управление базой данных — ключевой аспект поддержки сайта на WordPress. Со временем в базе данных накапливаются различные «черепки» (англ. ghost data): устаревшие таблицы, пустые записи, неиспользуемые метаданные и прочие остаточные данные, которые замедляют работу сайта и увеличивают размер базы. В этой статье подробно разберём, как автоматически находить и удалять такие данные без плагинов, а также с помощью полезных инструментов и плагинов, что поможет поддерживать базу в чистоте и оптимальном состоянии.
Что такое "старые черепки" и пустые данные в базе WordPress
Под «старые черепки» понимаются таблицы и записи, которые остались после удаления плагинов, тем или кастомных функций, но не были удалены из базы данных. Это могут быть:
- Пустые таблицы или таблицы с нулевым количеством записей.
- Пустые метаданные, например, в таблицах
wp_postmetaилиwp_usermeta. - Записи ревизий и автосохранений, которые давно не нужны.
- Отдельные записи в таблицах комментариев или опций, не имеющие актуального применения.
Со временем такие данные могут занимать значительную часть базы и замедлять запросы.
Почему важно регулярно чистить базу данных от старых черепков
Регулярная очистка базы данных:
- Снижает вес базы и ускоряет выполнение SQL-запросов.
- Уменьшает нагрузку на сервер и время отклика сайта.
- Снижает риск возникновения ошибок, связанных с конфликтующими или устаревшими данными.
- Облегчает бэкапы и миграции.
Поэтому автоматизация таких процессов — залог стабильной и быстрой работы сайта.
Как автоматически удалять пустые таблицы и черепки без плагинов
Для автоматизации удаления можно использовать WP-Cron — встроенный в WordPress планировщик задач. Реализуем функцию wp-lessons-cleanup-db, которая будет проверять и удалять пустые таблицы и записи.
Пример функции для удаления пустых таблиц, имена которых начинаются с префикса WordPress:
function wp_lessons_cleanup_db() {
global $wpdb;
$tables = $wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}%'");
foreach ($tables as $table) {
$table_name = array_values((array)$table)[0];
$count = $wpdb->get_var( "SELECT COUNT(*) FROM `" . esc_sql( $table_name ) . "`" );
if ($count == 0) {
$wpdb->query( "DROP TABLE IF EXISTS `" . esc_sql( $table_name ) . "`" );
}
}
}
add_action( 'wp_lessons_daily_cleanup', 'wp_lessons_cleanup_db' );
// Запускаем задачу ежедневно
if ( ! wp_next_scheduled( 'wp_lessons_daily_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wp_lessons_daily_cleanup' );
}Этот код создаёт ежедневное событие, которое проверяет все таблицы с префиксом WP и удаляет пустые. Будьте осторожны и перед использованием создайте резервную копию базы!
Удаление пустых метаданных и старых ревизий
Для удаления пустых метаданных и ревизий можно использовать следующий код:
function wp_lessons_clean_meta_and_revisions() {
global $wpdb;
// Удаление пустых postmeta
$wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_value = '' OR meta_value IS NULL" );
// Удаление старых ревизий старше 30 дней
$wpdb->query( $wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < %s",
date( 'Y-m-d H:i:s', strtotime('-30 days') )
) );
}
add_action( 'wp_lessons_weekly_cleanup', 'wp_lessons_clean_meta_and_revisions' );
// Запускаем задачу еженедельно
if ( ! wp_next_scheduled( 'wp_lessons_weekly_cleanup' ) ) {
wp_schedule_event( time(), 'weekly', 'wp_lessons_weekly_cleanup' );
}Этот код удаляет пустые метаданные и ревизии старше 30 дней. Также можно расширить логику под свои нужды.
Использование плагинов для автоматизации очистки базы данных
Если вы не хотите писать код, есть проверенные плагины для автоматической очистки базы данных:
- Clearfy Pro — помогает оптимизировать и очищать базу, удалять неиспользуемые данные.
- WP Rocket — кэш-плагин с возможностями очистки базы.
- WP-Optimize — плагин для глубокого очищения и оптимизации базы.
Clearfy Pro особенно удобен для автоматизации: можно настроить расписание очистки, удаление ревизий, спама, транзиентов и других устаревших данных, что существенно экономит время.
Безопасность и рекомендации
Перед любой очисткой базы данных обязательно делайте резервную копию. Используйте транзакции, если база поддерживает, чтобы избежать потери данных. Тестируйте код на локальной копии сайта перед применением на боевом ресурсе.
Также не забывайте, что не все пустые таблицы безопасно удалять — иногда плагины создают временные таблицы для кэширования, которые могут быть пусты в текущий момент.
Если сомневаетесь, лучше использовать проверенные плагины с возможностью восстановления.