Утилита для визуализации медленных SQL запросов «Anemometer»

в 16:11, , рубрики: mysql, Percona, sql, метки: , ,

Утилита для визуализации медленных SQL запросов «Anemometer» Хочу поделиться информацией о инструменте по визуализации, медленных sql запросов. Есть много инструментов для анализа slow_log файлов, но большинство работают в командной строке, а если slow_log большой, то это становится проблемой.
Когда мне понадобилось для разработчиков бд сделать наглядное отображение slow_log для анализа, я не стал изобретать велосипед, и решил поискать, что люди уже сделали для решения данной задачи.


Итак, у себя я имею percona-server 5.1, а это означает, что мне доступна дополнительная информация о запросах, которые будут писаться в slow_log (percona предоставляет дополнительные возможности по статистике запросов). Компания Percona имеет в своем арсенале кучу утилит для работы с базой, под названием percona-toolkit. Там уже есть инструменты для моих нужд, но ведь хочется чтобы можно было это все смотреть например в браузере, делать выборки по датам, динамику запросов в графиках смотреть наконец, и тут я наткнулся на проект который имеет название «Anemometer», и оказалось что он вполне подходит под все мои требования.

Установка:

Для начала скачиваем с github исходники проекта

git clone https://github.com/box/Anemometer.git

Устанавливаем percona-toolkit (список репозиториев можно найти на их сайте)

aptitude install percona-toolkit

Создаем на нашем mysql сервере базу для хранения slow_log инфирмации (если MySQL сервер у Вас ниже 5.5 используем файл install.sql)

mysql -h db.example.com < install.sql

Создаем пользователя для нашей базы

mysql -h db.example.com -e "grant ALL ON slow_query_log.* to 'anemometer'@'%' IDENTIFIED BY 'superSecurePass';"

Далее поправим конфиг в папке conf, для этого переименуем sample.config.inc.php в config.inc.php и добавим следующее

$conf['datasources']['имя сервера с базой данных'] = array(
    'host'  => 'db.example.com',
    '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;
    },
);

Первый кусок это параметры соединения с базой, второй подключение утилит, таких как pt-visual-explain и pt-query-advisor (они входят в пакет percona-toolkit)
Далее нам необходимо каким-то образом помещать данные из slow_log в базу slow_query_log, для этого добавим в cron скрипт следующего содержания:

#!/bin/bash

LOG="/var/log/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=db.example.com,D=slow_query_log,t=global_query_review 
                  --review-history h=db.example.com,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

В кроне ставим время выполнения скрипта исходя из объемов slow_log, у меня например каждые 30 минут.
Остается только натравить web сервер с php на каталог с проектом, описание данной процедуры выходит за рамки этой статьи.
Утилита для визуализации медленных SQL запросов «Anemometer»
Утилита для визуализации медленных SQL запросов «Anemometer»

Официальный сайт проекта:
github.com/box/Anemometer/wiki
Презентация:
www.ustream.tv/recorded/25053159#

P.S. Если версия percona-server выше чем 5.1, есть возможность вообще избежать использования файла slow_log, а использовать средства percona и performance_schema. Так же в конфиге можно установить различные параметры под себя.
P.P.S Это первый пост на хабре, ничего нового я тут не сказал, лишь краткий обзор проекта. Вся эта информация доступна на сайте проекта.

Автор: uran238


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js