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