检查mysql缓慢的查询

是否有可能监视MySQL如:

  • 如果一些查询运行的时间超过300秒,将会发出警告
  • 如果一些查询运行超过500秒 – 这将是至关重要的

我试过了:

/usr/lib/nagios/plugins/check_mysql_health --hostname localhost --username icinga --password XXX --mode slow-queries --warning 300

但是这只显示slow_queries /每秒的速率。 我如何描述mysql?

感谢您的帮助。

BR,

用percona检查mysql脚本。 有一些很好的工具: http : //www.percona.com/software/percona-toolkit http://www.percona.com/software/percona-monitoring-plugins

使用Nagios监视MySQL服务的可用性是可以的,但肯定不会太慢查询。

我使用一个简单的bash脚本,在crontab中每x秒运行一次,并扫描processlist以捕获运行超过180秒的查询。 希望它适合您的情况:

  #!/bin/bash [email protected] count=0 # capture all running queries echo "<TABLE BORDER=1><TR><TH>Queries running more than 180 seconds</TH></TR></TABLE>" > /tmp/long_running_queries.htm mysql -uroot -ppassword -s -e "SELECT now(), ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM information_schema.PROCESSLIST WHERE HOST not in ('%','localhost') AND COMMAND not in ('Sleep','Binlog Dump') AND TIME > 120;" > /tmp/all_running_queries.txt echo "<TABLE BORDER=1>" >> /tmp/long_running_queries.htm # store the output while IFS= read -r ROW do count=$(($count + 1)) echo "<TR>" >> /tmp/long_running_queries.htm echo "$ROW" >> /tmp/long_running_queries.htm echo "</TR>" >> /tmp/long_running_queries.htm done < /tmp/all_running_queries.txt # if there are more than 2 long running queries then send the output from while loop above into mail # else pruge the output if (("$count" > "2")); then echo "</TABLE>" >> /tmp/long_running_queries.htm Subject="$count SQL queries running for more than 180 Seconds" Body="Some text" echo $Body | mutt -a /tmp/long_running_queries.htm -s "$Subject" $Notify else echo "" > /tmp/long_running_queries.htm fi