Box Anemometer — ловим медленные запросы MySQL
Всем привет. На днях задался вопросом о нагрузке на MySQL и отлове сложных запросов, потому что уж очень дол…Ну да «как с**ть так и палочку искать», ну это как обычно говорят. Потому что запросы к БД одно из важнейших критериев при работе WEB-приложения. Ну и как говорится далеко ходить не надо, команда MySQL позаботились о нас и начиная с 5 версии СУБД добавили данную функцию. А что она собственно делает? Она отлавливает медленные запросы и пишет их в лог.
Но отслеживать медленные запросы вручную читая лог тупое занятие, да и утомительное 🙂 Для этого есть прекрасное средство о котором я и хотел Вам рассказать — это супер-пупер Box Anemometer.
Box Anemometer — это средство мониторинга медленных запросов, который анализирует журнал медленных запросов и на графике выявляет наиболее критические точки в запросах. Более подробную информацию можете почерпнуть на Офф сайте.
Ну что я думаю хватит разглагольствовать, приступим к установке.
Скачиваем с репы Anemometer:
~$ git clone git://github.com/box/Anemometer.git anemometer
Если Вы используете порт 9418 уже используется, то:
~$ git clone https://github.com/box/Anemometer.git anemometer
Переходим в директорию со скачанным приложением:
~$ cd anemometer
Выполняем скрипт:
~# mysql -h localhost < install.sql ~# mysql -h localhost -e "grant ALL ON slow_query_log.* to 'anemometer'@'%' IDENTIFIED BY 'superSecurePass';"
Приступим к настройке:
~$ cd anemometer/conf ~$ cp sample.config.inc.php config.inc.php
Далее переходим в файл:
~$ vi config.inc.php
Настраиваем конфиг:
$conf['datasources']['localhost'] = array(
'host' => 'localhost', // Хост БД
'port' => 3306, // Порт БД
'db' => 'slow_query_log', // Имя БД
'user' => 'anemometer', // Пользователь БД
'password' => 'superSecurePass', // Пароль БД
'tables' => array(
'global_query_review' => 'fact',
'global_query_review_history' => 'dimension'
)
);
..
..
$conf['plugins'] = array(
...
'explain' => function ($sample) {
$conn['user'] = 'anemometer';
$conn['password'] = 'superSecurePass';
return $conn;
},
);
Ну а теперь в домашней дирректории создадим исполняемый файл, который мы будем запускать, чтобы он нам считывал лог-файл сложных запросов:
~# touch Anemometer-Scripts
Добавим в него следующий скрипт:
#!/bin/bash
LOG="/var/log/mysql/mysql-slow.log"
if [[ ! -e "$LOG" ]]
then
echo "No slow log process";
exit
fi
mysql -uroot -e "SET GLOBAL slow_query_log=0"
mv "$LOG" /var/log/mysql/slow_log.parse
mysql -uroot -e "SET GLOBAL slow_query_log=1"
pt-query-digest --user=anemometer --password=superSecurePass\
--review h=localhost,D=slow_query_log,t=global_query_review \
--history h=localhost,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% \
--filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \
/var/log/mysql/slow_log.parse
Сделаем его исполняемым:
~# chmox +x Anemometer-Scripts
Важно! В файле конфигурации БД /etc/mysql/my.cnf раскоментировать строки!
log-slow-queries=/var/log/mysql/mysql-slow.log long_query_time=2 log-queries-not-using-indexes
Ну вроде и все. Теперь перезагрузим сервер БД MySQL и радуемся результату.
Кстати скрипт можно добавить в крон-задачи, в зависимости от того на сколько часто нужно обновлять статистику запросов.
Результат должен быть вот таким, любуемся.
Если вдруг что то не получается, не стесняемся спрашиваем. Буду рад помочь в настройке и разъяснению! Не забываем комментировать :-) Буду очень рад ;-)
Ссылка на проект Box Anemometr: https://github.com/box/Anemometer


Один комментарий
Николай
«Результат должен быть вот таким, любуемся.»
Ссылочку автор забыл.
За статью благодарю.