Мониторинг запросов MySQL при помощи bash-скрипта
Мониторинг запросов MySQL – это любимое времяпровождение администраторов, особенно в процессе тюнинга для увеличения производительности. Я хочу представить вам небольшой bash-скрипт для мониторинга запросов в релаьном времени. Скрипт использует команду “SHOW PROCESSLIST”. Вся прелесть этого сценария заключается в том, что с его помощью вы сможете логировать все запросы и провести анализ логов позже.
#!/bin/bash
while [ 1 ]
do
mysql -N -u root -p password -e ‘show processlist’ |grep -v ‘show processlist’
sleep 2
done
Примечание: Замените password на ваш пароль.
Примечание: -N убирает заголовки полей
Скрипт не показывает сам вывод команды SHOW PROCESSLIST. Вы также можете исключить из вывода спящие процессы, модифицировав сценарий следующим образом:
mysql -N -u root -ppassword -e ’show processlist’ |egrep -v ‘Sleep|show processlist’
Этот скрипт далеко не идеален, и уж тем более, не “одинок”. Существует мощная утилита mtop, с бОльшей функциональностью. Но она написана на perl, а его не слишком люблю :) Вероятно, что именно у меня не получилось заставить ее работать так, как хотелось бы мне. Лично я предпочел ей простое решение на bash, потому что я отнюдь не матерый perl-хакер.
Вы также можете использовать лог медленных запросов, но предложенный мной способ лучше подходит для поиска узких мест. Лог медленных запросов не показывает причину “замедленности” запроса, запись попадет в него уже после завершения запроса.
Оригинал:
mandriva 2008.1, mysql 5.0.51a
script shows some info but no queries
А не проще mysqladmin -i 5 processlist или mytop? + если все треды по какой-то причине забиты не можешь создать соедниение к серваку просто командой mysql.
Спасибо, но сейчас интересует как раз утилита mtop.
Скрипт пропускает запросы, которые появляются во время команды sleep. Решил просто – убрав sleep. Нагрузка на сервер повышается, но для редкого просмотра, когда это нужно, вполне подходит.