Как удалить лишние ревизии записей WordPress и уменьшить нагрузку на базу

Если база WordPress разрастается без видимой причины, одна из самых частых причин — ревизии записей. Они полезны, когда нужно откатить текст или сравнить версии, но на сайтах с активным редактированием их становится слишком много. В итоге растёт таблица wp_posts, увеличивается число связанных записей в wp_postmeta, а резервные копии и запросы к базе становятся тяжелее.

Удалять ревизии можно безопасно, если сначала понять, сколько их накопилось, а потом очистить только лишнее. Ниже — практический порядок действий без лишних рисков.

Что такое ревизии и почему они раздувают базу

Ревизия — это сохранённая версия записи или страницы. WordPress создаёт её автоматически при каждом сохранении. Это удобно для редакторов, но на сайтах с длинными статьями, несколькими авторами или частыми правками ревизий может быть очень много.

Каждая ревизия хранится как отдельная запись в базе данных. Если сайт давно работает и контент регулярно обновляется, ревизии начинают занимать заметный объём. Обычно это не ломает сайт напрямую, но влияет на:

  • размер базы и время её резервного копирования;
  • скорость некоторых запросов к таблице wp_posts;
  • удобство обслуживания, когда база уже заметно выросла;
  • нагрузку на хостинг при импортах, бэкапах и оптимизации таблиц.

Важно понимать: удаление ревизий не ускоряет сайт магически в два раза. Но если база сильно разрослась именно из-за них, эффект будет вполне заметен на уровне обслуживания и отклика админки.

Сначала проверьте, действительно ли проблема в ревизиях

Перед очисткой имеет смысл посмотреть, сколько ревизий хранится в базе. Самый простой способ — через phpMyAdmin или другой SQL-клиент выполнить запрос к таблице постов. В WordPress префикс таблицы может отличаться, поэтому в примере ниже используется стандартный wp_; если у вас другой префикс, подставьте свой.

Запрос покажет количество ревизий:

SELECT COUNT(*) AS revisions_count
FROM wp_posts
WHERE post_type = 'revision';

Если число большое, а сайт давно живёт и активно редактируется, ревизии действительно могли стать одной из причин разрастания базы. Дополнительно можно посмотреть, сколько места занимает таблица wp_posts в целом, но для практического решения обычно достаточно самого факта большого количества ревизий.

Безопасный способ удалить старые ревизии

Перед любой массовой очисткой сделайте резервную копию базы. Это не формальность: если вы удалите не то или обнаружите, что на сайте нужен более длинный журнал версий, откатиться будет проще из бэкапа, чем восстанавливать записи вручную.

Дальше есть несколько рабочих вариантов. Для большинства сайтов удобнее использовать один из двух: плагин для очистки базы или ручной SQL-запрос. Если вы не уверены в своих действиях, лучше начать с плагина. Если вы работаете с хостингом, где есть доступ к phpMyAdmin, SQL тоже подойдёт, но требует аккуратности.

Вариант 1. Очистка через плагин

Если нужен безопасный и понятный способ без ручного SQL, используйте плагин для обслуживания базы. В экосистеме WordPress для этого часто применяют инструменты, которые умеют удалять ревизии, автосохранения и другой мусор из базы. Такой подход удобен тем, что вы видите, что именно будет удалено, и можете не трогать лишнее.

После установки плагина обычно нужно открыть раздел очистки базы, выбрать удаление ревизий и запустить процесс. Перед запуском проверьте, нет ли в списке пунктов, которые вам нужны: например, автосохранения или временные данные других плагинов. Не запускайте всё подряд, если не понимаете, что именно удаляется.

Плюс этого способа в том, что он подходит большинству владельцев сайтов без доступа к серверу. Минус — интерфейс и набор функций зависят от конкретного плагина, а на очень больших базах очистку иногда лучше делать поэтапно.

Вариант 2. Удаление ревизий SQL-запросом

Если вам нужен точечный и быстрый способ, можно удалить все ревизии напрямую из базы. Этот вариант подходит только тогда, когда вы понимаете, что делаете, и у вас уже есть свежая резервная копия.

Для удаления всех ревизий используется такой запрос:

DELETE FROM wp_posts
WHERE post_type = 'revision';

После этого ревизии исчезнут из базы, но сами записи и страницы останутся. Это именно удаление версий, а не контента. Если на сайте есть нестандартный префикс таблиц, замените wp_posts на свою таблицу.

Иногда после массового удаления полезно оптимизировать таблицу, чтобы база физически освободила место. На MySQL и MariaDB для этого используют:

OPTIMIZE TABLE wp_posts;

Но здесь есть нюанс: на некоторых хостингах эта операция может выполняться долго или быть ограничена. Если база большая, лучше запускать её в период низкой нагрузки. И не забывайте, что оптимизация таблицы — это не обязательный шаг для удаления ревизий, а дополнительная операция для освобождения места.

Как удалить только старые ревизии, а не все подряд

Полное удаление всех ревизий подходит не всем. Если редакция активно работает с контентом, может быть полезно оставить последние версии, а убрать только старые. WordPress сам по себе не даёт гибкой политики хранения ревизий через интерфейс, но на уровне базы можно удалить ревизии старше определённого количества по каждой записи. Это уже более тонкая задача и требует аккуратности.

На практике чаще выбирают один из двух подходов:

  • удалить все ревизии, если сайт давно не нуждается в старых версиях;
  • ограничить количество ревизий на будущее, чтобы база снова не разрасталась.

Если вам нужно сохранить часть истории, не удаляйте всё подряд вручную без понимания структуры данных. В таком случае проще сначала настроить ограничение на новые ревизии, а старые очистить через плагин, который показывает, что именно будет удалено.

Как ограничить количество новых ревизий в WordPress

Чтобы проблема не вернулась через месяц, имеет смысл ограничить число ревизий, которые WordPress будет хранить для новых записей. Это делается через wp-config.php. Такой способ работает на уровне ядра WordPress и не зависит от темы.

Добавьте строку в файл wp-config.php до комментария /* That's all, stop editing! Happy publishing. */:

define( 'WP_POST_REVISIONS', 5 );

В этом примере WordPress будет хранить не больше пяти ревизий для каждой записи. Вместо 5 можно указать другое число, подходящее вашему процессу редактирования. Если поставить 0, ревизии будут отключены, но это уже спорное решение: для новостных сайтов, редакций и проектов с несколькими авторами это часто неудобно и рискованно.

Если вы не хотите полностью отключать ревизии, а только сократить их количество, это самый практичный вариант. Он не удаляет старые версии автоматически из базы, но не даёт проблеме расти дальше.

Как проверить, что очистка сработала

После удаления ревизий стоит проверить результат, а не полагаться на ощущение. Самый прямой способ — снова выполнить SQL-запрос на количество ревизий:

SELECT COUNT(*) AS revisions_count
FROM wp_posts
WHERE post_type = 'revision';

Если вы удаляли все ревизии, результат должен стать нулевым. Если оставляли часть истории, число уменьшится. Ещё один практический признак — уменьшение размера базы в панели хостинга или в phpMyAdmin. Но помните: физическое освобождение места после удаления не всегда происходит мгновенно, особенно если таблицы не оптимизировались.

После этого откройте несколько записей в админке и сохраните их заново. Если ограничение через WP_POST_REVISIONS настроено правильно, новые ревизии будут создаваться, но уже в ограниченном количестве.

Что ещё влияет на нагрузку базы, кроме ревизий

Если база была сильно перегружена, одних ревизий может быть недостаточно для заметного эффекта. Часто вместе с ними разрастаются автосохранения, временные данные плагинов, старые спам-комментарии и мусор в таблицах метаданных. Но это уже отдельная задача, и не стоит смешивать её с очисткой ревизий в одну бесконтрольную процедуру.

Для начала лучше решить именно проблему ревизий: это понятный и безопасный шаг, который легко проверить. Если после него база всё ещё слишком большая, тогда уже имеет смысл смотреть на другие источники разрастания.

Если вам нужен более удобный способ регулярной чистки базы без ручного SQL, можно использовать инструменты обслуживания, которые умеют удалять ревизии и другие типы служебных данных. Например, в экосистеме WPShop для этого подходит Clearfy Pro, если вам нужен именно плагин для чистки и обслуживания сайта. Но даже в этом случае полезно понимать, что именно он удаляет и как это влияет на базу.

Если коротко: сначала сделайте резервную копию, затем удалите лишние ревизии одним из безопасных способов, после этого ограничьте их количество на будущее и проверьте результат через базу. Так вы уберёте лишний мусор без риска потерять важные версии записей.

⭐⭐⭐⭐⭐