Каждая загрузка страницы, отправка формы, работа плагина и сессия пользователя в WordPress связаны с запросами к базе данных. Со временем база данных накапливает ненужные данные: старые ревизии постов, устаревшие временные данные, оставшиеся метаданные, спам-комментарии и неиспользуемые таблицы от деактивированных плагинов. Это нагромождение замедляет запросы, увеличивает размеры резервных копий и ухудшает общую производительность сайта. Этот гид охватывает, как выявить ненужные данные в базе данных, безопасно их очистить и предотвратить их повторное появление.
Что хранит WordPress в базе данных
Понимание того, что находится в вашей базе данных, помогает определить, что можно безопасно удалить. Стандартная установка WordPress использует 12 основных таблиц, а плагины добавляют свои таблицы по мере необходимости.
| Таблица | Содержит | Общий источник ненужных данных |
|---|---|---|
| wp_posts | Посты, страницы, ревизии, вложения, пользовательские типы постов | Ревизии постов, автосохранения |
| wp_postmeta | Метаданные для постов (пользовательские поля, данные плагинов) | Сиротские метаданные от удаленных постов |
| wp_options | Настройки сайта, настройки плагинов, временные данные | Устаревшие временные данные, старые настройки плагинов |
| wp_comments | Комментарии и трекбэки | Спам-комментарии, удаленные комментарии |
| wp_commentmeta | Метаданные для комментариев | Метаданные Akismet для удаленных комментариев |
| wp_usermeta | Метаданные пользователей | Токены сессий, данные пользователей плагинов |
| wp_termmeta | Метаданные для категорий и тегов | Сиротские метаданные терминов |
Общие источники ненужных данных в базе данных
Ревизии постов
WordPress сохраняет ревизию каждый раз, когда вы нажимаете "Сохранить черновик" или "Обновить" на посте или странице. Пост, отредактированный 50 раз, имеет 50 ревизий, хранящихся в таблице wp_posts, каждая из которых имеет свой набор записей postmeta. На сайте с сотнями постов ревизии могут составлять тысячи ненужных строк в базе данных.
Временные данные
Временные данные — это временная информация, хранящаяся в таблице wp_options ядром WordPress и плагинами. У них есть сроки действия, но WordPress не удаляет автоматически устаревшие временные данные. Они накапливаются со временем и могут значительно увеличить таблицу опций, особенно на сайтах с множеством плагинов.
Сиротские данные
Когда вы удаляете пост, его метаданные (записи wp_postmeta) могут не быть удалены. Аналогично, удаление комментариев, пользователей или терминов может оставить после себя сиротские строки метаданных. Деактивированные и удаленные плагины часто оставляют свои таблицы базы данных, занимая место и загромождая вашу базу данных.
Спам и удаленный контент
Спам-комментарии, удаленные посты и удаленные комментарии остаются в базе данных до тех пор, пока не будут вручную очищены. Сайты с Akismet или другими фильтрами спама могут накапливать тысячи спам-комментариев, которые требуют периодической очистки.
Автосохранения
WordPress создает автосохраненные посты, когда вы нажимаете "Добавить новый" в редакторе постов, даже если вы никогда не публикуете. Эти данные накапливаются со временем и не имеют смысла после завершения сессии редактирования.
Ручная очистка базы данных с помощью SQL
Для тех, кто знаком с SQL, вы можете очистить данные напрямую, используя phpMyAdmin или клиент базы данных. Всегда создавайте резервную копию вашей базы данных перед выполнением запросов на очистку.
Удалить ревизии постов
-- Удалить все ревизии постов
DELETE FROM wp_posts WHERE post_type = 'revision';
-- Удалить сиротские postmeta (метаданные для удаленных постов)
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
Очистка временных данных
-- Удалить истекшие временные данные
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();
-- Удалить данные временных данных для истекших временных данных
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%';
Удаление спама и удаленных комментариев
-- Удалить спам-комментарии
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- Удалить удаленные комментарии
DELETE FROM wp_comments WHERE comment_approved = 'trash';
-- Удалить метаданные комментариев-сирот
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;
Очистка базы данных на основе плагинов
Если вы предпочитаете графический интерфейс, несколько плагинов занимаются оптимизацией базы данных с возможностью планирования:
WP-Optimize
WP-Optimize — это бесплатный плагин, который очищает ревизии, черновики, спам, временные данные и сиротские данные. Он также оптимизирует таблицы базы данных и поддерживает запланированные очистки. Профессиональная версия добавляет поддержку мультисайтов и расширенное планирование.
Оптимизация базы данных WP Rocket
WP Rocket включает вкладку База данных, которая обрабатывает ревизии, автосохраненные черновики, удаленные записи, спам-комментарии, временные данные и оптимизацию таблиц. Поскольку WP Rocket в первую очередь является плагином кэширования, вы получаете очистку базы данных вместе с оптимизацией производительности в одном инструменте.
Advanced Database Cleaner
Этот плагин углубляется в процесс, обнаруживая таблицы, оставленные деактивированными плагинами, и сиротские события cron. Он классифицирует таблицы как созданные ядром WordPress, созданные плагинами или неизвестные, помогая вам определить, какие таблицы безопасно удалить.
| Плагин | Бесплатная версия | Запланированная очистка | Обнаружение таблиц |
|---|---|---|---|
| WP-Optimize | Да | Да | Базовое |
| WP Rocket | Нет (только Premium) | Да | Нет |
| Advanced Database Cleaner | Да | Только Pro | Да (подробно) |
Оптимизации wp-config.php
Предотвратите раздувание базы данных на источнике, добавив эти константы в ваш файл wp-config.php:
Ограничить ревизии постов
// Хранить только 5 ревизий на пост (рекомендуется)
define( 'WP_POST_REVISIONS', 5 );
// Полностью отключить ревизии (не рекомендуется для большинства сайтов)
define( 'WP_POST_REVISIONS', false );
Установка ревизий на 5 предоставляет достаточно истории для восстановления после ошибок, предотвращая неограниченный рост ревизий. Для контентных сайтов с частыми правками 10 ревизий является разумной альтернативой.
Авто-очистка корзины
// Очищать корзину каждые 7 дней (по умолчанию 30)
define( 'EMPTY_TRASH_DAYS', 7 );
// Отключить корзину (элементы удаляются немедленно - используйте с осторожностью)
define( 'EMPTY_TRASH_DAYS', 0 );
Интервал автосохранения
// Увеличить интервал автосохранения до 5 минут (по умолчанию 60 секунд)
define( 'AUTOSAVE_INTERVAL', 300 );
Оптимизация таблиц базы данных
После удаления строк выполните операцию OPTIMIZE для восстановления фрагментированного пространства:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments, wp_commentmeta;
Запланируйте это ежемесячно или после крупных операций очистки. Большинство плагинов очистки включают оптимизацию таблиц в свои запланированные задачи.
Планирование Автоматической Очистки
Настройте автоматические расписания: еженедельная очистка временных файлов и спама, ежемесячное удаление ревизий и оптимизация таблиц, а также квартальные аудиты таблиц плагинов-сирот. WP-Optimize и WP Rocket оба поддерживают запланированную очистку. Настраивайте их в часы низкой нагрузки.
Мониторинг Размеров Базы Данных
Отслеживайте размер вашей базы данных, чтобы рано выявить избыточность. Выполните этот запрос, чтобы увидеть размеры отдельных таблиц:
SELECT table_name AS 'Таблица',
ROUND(data_length / 1024 / 1024, 2) AS 'Данные (МБ)',
table_rows AS 'Строки'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC
LIMIT 20;
Если wp_options превышает 5 МБ или wp_postmeta растет более 100 МБ, пришло время для очистки. Эти таблицы запрашиваются часто, поэтому их размер напрямую влияет на время загрузки страниц.
Для комплексного подхода к оптимизации производительности, который включает оптимизацию базы данных наряду с кэшированием, оптимизацией изображений и конфигурацией сервера, прочитайте наш гид по оптимизации скорости WordPress. Для постоянного контроля состояния базы данных в рамках вашего обслуживания смотрите наш гид по обслуживанию WordPress.
Для получе��ия дополнительной информации обратитесь к официальной документации: API базы данных WordPress.
Часто Задаваемые Вопросы
Безопасно ли удалять ревизии постов из базы данных?
Да, удаление ревизий постов безопасно и не влияет на ваш опубликованный контент. Ревизии — это исторические снимки изменений черновиков. Как только ваш контент завершен, ревизии не имеют смысла для большинства сайтов. Тем не менее, всегда делайте резервную копию вашей базы данных перед выполнением любой очистки.
Улучшит ли оптимизация базы данных заметно скорость моего сайта?
Улучшение зависит от того, насколько избыточна ваша база данных. Сайты с более чем 50,000 сиротских строк или таблицей wp_options, превышающей 10 МБ, увидят заметные улучшения в времени загрузки страниц и отзывчивости административной панели. Меньшие сайты могут увидеть незначительные улучшения. Оптимизация базы данных работает вместе с кэшированием и другими мерами производительности для накопительного улучшения.
Как часто мне следует оптимизировать базу данных WordPress?
Для активных сайтов с регулярными обновлениями контента ежемесячная оптимизация является хорошей базовой практикой. Сайты с высоким трафиком, частыми комментариями, транзакциями WooCommerce или отправками форм могут извлечь выгоду из еженедельной очистки временных файлов и спама с ежемесячной оптимизацией таблиц.
Могут ли плагины для очистки базы данных сломать мой сайт?
Репутационные плагины, такие как WP-Optimize и WP Rocket, разработаны с учетом безопасности. Они нацелены на известные категории избыточности (ревизии, временные файлы, спам) и не затрагивают важные данные. Риск увеличивается при ручном удалении таблиц, специфичных для плагинов. Если вы не уверены, нужна ли таблица, оставьте ее на месте и сначала исследуйте ее назначение.
В чем разница между OPTIMIZE TABLE и удалением строк?
Удаление строк удаляет данные из таблицы. OPTIMIZE TABLE реорганизует физическое хранение таблицы после удаления строк, восстанавливая дисковое пространство и дефрагментируя файл данных. Рассматривайте это как удаление файлов (удаление строк) по сравнению с дефрагментацией вашего жесткого диска (оптимизация таблицы).
Должен ли я использовать InnoDB или MyISAM для таблиц WordPress?
WordPress по умолчанию использует InnoDB с версии 5.5, и это рекомендуемый движок хранения. InnoDB поддерживает блокировку на уровне строк (лучше для одновременных пользователей), транзакции и восстановление после сбоев. MyISAM быстрее для операций, ориентированных на чтение, но лишен этих надежных функций. Если вы найдете таблицы MyISAM в вашей базе данных, рекомендуется конвертировать их в InnoDB.
Как мне определить таблицы, оставшиеся от деактивированных плагинов?
Плагин Advanced Database Cleaner может обнаружить и классифицировать некорневые таблицы. В качестве альтернативы выполните SQL-запрос SHOW TABLES и сравните имена таблиц с таблицами ядра WordPress и вашими активными плагинами. Таблицы с префиксами, соответствующими деактивированным плагинам, являются кандидатами на удаление.
Добавляет ли WooCommerce значительную избыточность базы данных?
Да. WooCommerce хранит данные заказов, метаданные продуктов, сессии клиентов и временные файлы, которые значительно увеличиваются на активных магазинах. Используйте WooCommerce > Статус > Инструменты, чтобы регулярно очищать истекшие временные файлы и сессии.
Оптимизируйте Производительность со Всех Сторон
WP Rocket обрабатывает кэширование, очистку базы данных и оптимизацию производительности в одном плагине, чтобы ваш сайт работал гладко.
Изучите WP Rocket →


