Хочу поделиться информацией о инструменте по визуализации, медленных 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 на каталог с проектом, описание данной процедуры выходит за рамки этой статьи.
Официальный сайт проекта:
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