Владельцы и администраторы блогов WordPress часто сталкиваются с тем, что после установки новых плагинов или написании собственных снижается скорость работы всего сайта. Зачастую это связано с избыточным количеством посылаемых скриптами SQL-запросов в базу данных. Иногда перед некоторыми становится дилемма — какой из плагинов выбрать, если у нескольких из найденных схожий функционал. Чтобы решить эти проблемы, найти наиболее рационально работающие скрипты, плагины или даже темы, необходимо провести анализ и определить, какие из скриптов посылают очень много или достаточно мало SQL запросов, сколько времени занимает их выполнение.
WordPress предоставляет возможность записи SQL запросов для их последующего анализа и отладки — это именованная константа SAVEQUERIES, которую нужно объявить в файле настроек WP wp-settings.php вот таким образом:
define( 'SAVEQUERIES', true );
После того, как константаSAVEQUERIES определена, и активирована, то есть ей установлено значение константа true, WordPress сразу же начнет запоминать буквально все SQL-запросы к базе данных при каждом обращении посетителя (например Вас) к страницам сайта. Информация о запросах будет сохраняться в определенном массиве (точнее массиве масивов).
Чтобы увидеть какие SQL-запросы и в каком порядке выполнялись, можно в файле footer.php вашей текущей темы разместить следующий код:
";
print_r( $wpdb->queries );
echo "
";
}
?>
Этот код должен быть расположен да закрывающего тега
. Теперь, когда код добавлен, при каждом обновлении страниц сайта, в самой нижней его части будет выводиться информация об SQL запросах. Там же будет отображаться время, затраченное на выполнение каждого запроса, имена файлов и их функций, используемые для SQL запросов.
Теперь, опираясь на получаемую информацию, можно будет проводить анализ SQL запросов WordPress и вносить соответствующие изменения в скрипты (если Вы их сами пишите) для того, чтобы по возможности уменьшить количество запросов, что в последствии скажется на скорости работы вашего сайта или блога. Кроме этого можно анализировать и SQL запросы, выполняемые плагинами, чтобы выбрать для себя наиболее быстро работающий плагин (который посылает в базу данных меньше запросов) из нескольких, выполняющих одинаковые функции.
Но все же выводимые результаты как-то не очень хорошо воспринимаются на глаз, да и приходится вручную подсчитывать количество выполненных запросов, суммарное время, затраченное ими и так далее.
Чтобы решить эту проблему, предлагаю вашему вниманию адаптированный вариант скрипта для вывода на экран результатов работы сборщика SQL-запросов, который написал для себя и сам его использую:
Результат работы этого скрипта будет выглядеть примерно так (время выполнения запросов на картинке мизерное, не такое конечно же, как на хостингах с бюджетными тарифными планами, т.к. картинку снимал на локальном сервере):
Теперь уже более удобно — в начале сразу же видно, сколько было выполнено запросов к базе данных и сколько на это было затрачено времени, да и функции с файлами уже не склеиваются в одну строку, что более удобно для нанализа SQL запросов.
Кстати, это скрипт Вы можете использовать даже на действующем сайте, ведь отчет об SQL-запросах будет виден только администратору, так как собственно весь скрипт заключен в условие:
if ( current_user_can( 'administrator' ) ) {
Внимание!
Используйте приведенный в пример скрипт и константу SAVEQUERIES в файле конфигурации wp-settings.php только во время отладки вашего сайта и анализа SQL запросов! Не используйте их, когда сайт работает в обычном режиме и доступен посетителям.
Функция WordPress, которая производит запись всех запросов, добавит нагрузку на сервер SQL и будет прилично замедлять работу вашего сайта в целом. Поэтому по окончании анализа и отладки обязательно установите для константы SAVEQUERIES значение false, или даже закомментируйте ее, или вообще удалите из файла wp-settings.php. То же самое сделайте и со скриптом в файле footer.php, который выводил на экран статистику.
Ну вот есть сайт, есть необходимый для него функционал, ничего нельзя менять. Что даст нам количество обращений?
Статистику нужно смотреть на сервере и если не хватает ресурсов, расширять функционал там, а не ограничивать задуманную функциональность.
Согласен, раз уж 100% нельзя ничего менять, то естественно выход один — менять либо тарифный план хостинга, либо вообще сервер, если сайт медленно работает.
А кроме количества обращений скрипт покажет еще и время выполнения каждого запроса. По результатам которых можно будет оценить насколько хорош или слаб SQL-сервер. Возможно это даст толчок к тому, что нужно оптимизировать базу данных или опять же — менять сервер.
Статистику на сервере смотреть нужно периодически, независимо от того, работает ли сайт хорошо или плохо. Но бывает так, что не у всех есть доступ к ней, либо кто-то не умеет анализировать статистику.
Юрий,
спасибо за замечание — ошибки в коде поправил, видимо из бэкапа взялся «черновой» вариант во время вчерашней правки статьи.
О какой статистике Вы спрашиваете?
Если о статистике на сервере, то например в phpMyAdmin есть в меню кнопки (или ссылки) «Состояние» и «Процессы». Вот кликнув по ним Вы можете попасть в отчеты, где много данных, особенно в разделе «Состояние». И по этим данным можно выяснить слабые стороны работы либо ваших скриптов, либо сервера SQL. Кроме этого можно просматривать логи записей обращений скриптов к базе данных.
Однако зачастую без проблем не обойтись, так как не все хостинги предоставляют выше указанные логи и доступ к статистике SQL-сервера.
Занятная статья. Я так понимаю с помощью этого кода можно определить не только скрипты, но и плагины которые делают SQL запрос, благодаря чему эти плагины можно заменить на альтернативные.
Ну вот есть сайт, есть необходимый для него функционал, ничего нельзя менять. Что даст нам количество обращений?
Статистику нужно смотреть на сервере и если не хватает ресурсов, расширять функционал там, а не ограничивать задуманную функциональность.
Согласен, раз уж 100% нельзя ничего менять, то естественно выход один — менять либо тарифный план хостинга, либо вообще сервер, если сайт медленно работает.
А кроме количества обращений скрипт покажет еще и время выполнения каждого запроса. По результатам которых можно будет оценить насколько хорош или слаб SQL-сервер. Возможно это даст толчок к тому, что нужно оптимизировать базу данных или опять же — менять сервер.
Статистику на сервере смотреть нужно периодически, независимо от того, работает ли сайт хорошо или плохо. Но бывает так, что не у всех есть доступ к ней, либо кто-то не умеет анализировать статистику.
Здравствуйте, Владимир!
1. Поправьте Ваш код в строках 7 и 16.
2. Как правильно проводить анализ результатов статистики?
Юрий,
спасибо за замечание — ошибки в коде поправил, видимо из бэкапа взялся «черновой» вариант во время вчерашней правки статьи.
О какой статистике Вы спрашиваете?
Если о статистике на сервере, то например в phpMyAdmin есть в меню кнопки (или ссылки) «Состояние» и «Процессы». Вот кликнув по ним Вы можете попасть в отчеты, где много данных, особенно в разделе «Состояние». И по этим данным можно выяснить слабые стороны работы либо ваших скриптов, либо сервера SQL. Кроме этого можно просматривать логи записей обращений скриптов к базе данных.
Однако зачастую без проблем не обойтись, так как не все хостинги предоставляют выше указанные логи и доступ к статистике SQL-сервера.
Занятная статья. Я так понимаю с помощью этого кода можно определить не только скрипты, но и плагины которые делают SQL запрос, благодаря чему эти плагины можно заменить на альтернативные.