База данных – место, где хранятся записи, страницы, комментарии и другой контент веб-ресурса, а также настройки сайта, тем и плагинов. Если блог, интернет-магазин, сайт-галерея или видео(туб)-сайт на WordPress «живой» и регулярно обновляется, размер базы данных растёт, как на дрожжах. А если ко всему этому наблюдается прирост числа посетителей, количество простых и сложных MySQL запросов также растёт.
Простой MySQL запрос – запрос, в котором участвует одна таблица БД, сложный – в котором участвует более одной таблицы БД.
В результате увеличивается нагрузка на сервер и в какой-то момент сайт начинает «тормозить».
Обсудим первые шаги к оптимизации работы MySQL, а именно оптимизацию таблиц.
Воспользоваться WP-Optimize может пользователь любого уровня подготовки без каких-либо проблем и знаний о mySQL. Всё что нужно для его реализации – это знать, как устанавливать плагины на WordPress.
Внимание!
Прежде чем начать выполнять описанные далее действия обязательно создайте резервную копию базы данных.
В результате WP-Optimize очищает весь мусор в виде ненужных комментариев (спам, неподтвержденные комментарии и др.), всех ревизий постов и пустые поля из таблиц.
К тому же, он не занимает много места, и по завершению его можно спокойно деактивировать до следующего использования.
Альтернатива предыдущему плагину от автора множества популярных плагинов для WordPress.
Его интерфейс достаточно понятен, здесь сразу выводится детальный отчёт о том, сколько мусора на текущий момент хранится в базе данных. При этом, в WP-Sweep можно запускать как полную оптимизацию, так и поэтапную:
Этот способ возможно реализовать только в том случае, если у вас есть доступ к административной панели phpMyAdmin.
Перед выполнением дальнейших действий необходимо сделать бэкап базы данных
wp-config.php
, лежащий в корневой директории сайта, и найдите строку, которая начинается с define('DB_NAME')
. Значение, указанное после 'DB_NAME'
– и есть название базы данных веб-ресурса:Что происходит в результате? По сути операция по оптимизации через phpmyadmin выполняет похожие функции, а именно - выполняется SQL запрос OPTIMIZE TABLE , который, реорганизует физическое хранилище табличных данных и связанных с ними данных индекса. Это помогает сократить используемое дисковое пространство и улучшить операции чтения/записи в таблице(-ах).
Оптимизация таблиц (и дефрагментация файла базы данных) необходима, когда в БД постоянно добавляются и удаляются записи. Это позволяет убрать пустые поля в таблице, ускоряя выборку данных из нее.
Очистить таблицы также можно в ручном режиме, что по сути является альтернативой использованию специальных Wordpress плагинов. Вот некоторые примеры SQL запросов.
Удаление всех ревизий:
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( b.term_taxonomy_id = d.term_taxonomy_id)
WHERE a.post_type = 'revision'
AND d.taxonomy != 'link_category';
Удаление всех спам-комментариев:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
Удалить все неподтвержденные комментарии:
DELETE from wp_comments WHERE comment_approved = '0';
Удалить все неиспользуемые теги:
DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 );
DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms);
DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);
Удалить временные опции:
DELETE FROM wp_options WHERE option_name LIKE ('%\_transient\_%');
Дальнейшие действия связаны непосредственно с самой базой данных и начинаются с поиска и определения медленных запросов. Зачем искать подобные запросы? Например, для того чтобы найти плагин, использующий не оптимальные, "тяжелые" запросы, тормозящий этим работу базы данных, а впоследствии и сайта.
На этом этапе, вам уже не обойтись без навыков администрирования веб-сервера.
Один из способов решить эту задачу – включить лог медленных запросов MySQL. Делается это с помощью настройки конфигурационного файла базы данных, который часто хранится в директории etc/mysql/my.cnf
или etc/my.cnf
.
Откройте его в текстовом редакторе и добавьте такие строчки кода:
slow_query_log = /var/log/mysql/mysql-wp-slow.log
long_query_time = 5
,
где /var/log/mysql/mysql-wp-slow.log
– путь к файлу, в который будет записана информация о медленных запросах (перед выполнением настройки my.cnf его необходимо создать), 5 – время выполнения запроса в секундах, по истечению которого он считается медленным.
После перезапуска MySQL все медленные запросы будут записаны в /var/log/mysql/mysql-wp-slow.log
, которые и нужно будет оптимизировать в дальнейшем.
Представленные выше способы являются лишь базовым набором рекомендаций, поскольку предмет оптимизации зависит от специфики сайта и определения "узкого места", замедляющего его работу.