Ремонт и оптимизация базы данных в WordPress (WP_ALLOW_REPAIR)
C таблицами Базы Данных может случиться разное и есть много кейсов, когда ремонт (REPAIR TABLE) или оптимизация (OPTIMIZE TABLE) таблиц БД решает проблему.
Несколько примеров:
-
У меня было такое, что при попытке получить какие-либо данные из БД их там просто не было, хотя при проверке они там есть.
-
Другой пример, из практики моего коллеги. Таблица wp_options весит космические 11-17 ГБ, а при дампе всего 10-100 МБ. После запуска:
OPTIMIZE TABLE wp_options;
17 ГБ превратились в 311 КБ. Сделал так для всех сайтов, в итоге освободил около 100 ГБ места на сервере.
Дело тут видимо в каком-то кэше, который передавался при копировании БД из одного сайта к другому.
-
Большая крон задача на пересчет кол-ва записей в рубрике, для всех записей работала очень медленно. Однако после запуска
OPTIMIZE TABLE {table}
для всех таблиц БД, стала работать в 10 раз быстрее.Оптимизацию всех таблиц можно сделать через команду wp db optimize.
Скрипт WordPress для оптимизации БД
В WordPress есть родной скрипт для ремонта таблиц базы данных. Находится он в файле wp-admin/maint/repair.php. Обратиться можно по адресу: http://site.com/wp-admin/maint/repair.php
это самодостаточный скрипт, но для обращения к этому файлу напрямую по URL, в wp-config.php должна быть установлена константа:
const WP_ALLOW_REPAIR = true; // или так define( 'WP_ALLOW_REPAIR', true );
Если такая константа есть, то при переходе по URL вы увидите такую страницу (диалоговое окно):
Немного об OPTIMIZE и REPAIR
OPTIMIZE TABLE
Данная операция реорганизует (дефрагминтирует) физическое пространство занимаемое таблицей и индексами, что обеспечивает уменьшение занимаемого места и ускорение операций ввода/вывода. Конкретно действия отличаются для разных движков (поддерживаются MyISAM, ARCHIVE и InnoDB).
Как автоматизировать данную операцию на сервере?
Для отдельной таблицы это можно сделать SQL-запросом:
OPTIMIZE TABLE table_name
Для всех таблиц в базе, с помощью утилиты mysqlcheck:
mysqlcheck --user=USER --password=PASS --optimize database_name
Или можно воспользоваться WP CLI командой wp db optimize:
$ wp db optimize Success: Database optimized.
REPAIR TABLE
Восстанавливает поврежденную таблицу базы данных. Работает только для некоторых SQL движков, в частности это таблицы: MyISAM, ARCHIVE и CSV.
Или можно воспользоваться WP CLI командой wp db repair:
$ wp db repair Success: Database repaired.