Оптимизация баз WordPress

У сайтов, работающих на системе WordPress, существует известная проблема разрастания SQL базы, и далеко не все таблицы в этой базе разрастаются по делу. Особенно обращают на себя внимание таблицы wp_commentmeta и wp_postmeta, которые могут разрастись даже больше, чем основные таблицы wp_comments и wp_posts. А это явно ненормально.

Причем оптимизировать их обычные оптимизаторы, вроде плагина WP-Optimize, толком не могут. Приходится делать оптимизацию руками, прямо через PHP MyAdmin. Итак, последовательность действий следующая:

1. Запускаем PHP MyAdmin, вводим логин и пароль для доступа к базе сайта. Если вы их забыли — они есть в файле config.php вордпресса.

2. Выбираем базу вашего сайта. Чтобы не напоганить случайно таблицы wp_commentmeta и wp_postmeta — делаем их экспорт в файл (не забудьте выбрать сжатие gzip, чтобы файл был поменьше и быстрее закачался к вам на компьютер).

3. Снова выбираем базу вашего сайта. Переходим на закладку SQL.

4. В открывшееся окно запроса копируем вот такой запрос:

SELECT * FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments );
DELETE FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments );
SELECT * FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';

И запускаем его на выполнение. Логика понятна — он чистит таблицу wp_commentmeta от уже ненужного мусора.

5. Убеждаемся, что с комментариями ничего не случилось.

6. Снова выбираем базу вашего сайта. Переходим на закладку SQL. В открывшееся окно запроса копируем вот такой запрос:

SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;

И запускаем его на выполнение. Логика тоже понятна — он чистит таблицу wp_postmeta.

7. Убеждаемся, что с постами ничего не случилось — у них не слетели картинки и прочее.

Если же таблицы wp_commentmeta и wp_postmeta в процессе чистки испортятся — их можно удалить и затем поднять из копии, слитой вами к себе на комп в п.2.

8. Снова выбираем базу вашего сайта. Отмечаем ВСЕ таблицы. Внизу в меню выбранных таблиц — выбираем пункт «Оптимизировать базу». Выполняем.

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

После такой операции у меня обычно wp_commentmeta, в которой была сотня тысяч записей, оказывается почти пустой. wp_postmeta урезается меньше — но тоже выигрыш есть. Как ее ооптимизировать сильнее — буду думать дальше. Пока вот так.

Настоящий материал самостоятельно опубликован в нашем сообществе пользователем proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@newru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

You may also like...

Подписка
На почту
0 Комментарий
Встроенные Обратные Связи
Все комментарии