Программирование

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

Один комментарий

Добавить комментарий

Войти с через: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Защита от роБота * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.