监控解决scheme,以帮助修复慢MySQL查询问题

我有两台服务器:一台运行Apache,另一台运行MySQL。 我没有安装任何监视工具。

每过一段时间,看起来我的SQL查询运行速度非常慢(通常在0.3秒内运行的查询现在需要20秒)。 我不知道这是一个MySQL问题,一个CPU问题,甚至是一个networking问题,因为它通常是在没有人检查的时候发生的,所以我正在寻找一个监控解决scheme来帮助我查明问题。

谢谢。

首先要检查的是你的慢查询日志。 您可能必须对其进行configuration,因为我不确定它是否在所有版本的MySQL中默认configuration。 默认设置通常是logging所有运行时间超过3秒的查询。

这可能是因为你有一个特定的查询运行时间很长,并locking了很多其他查询,这应该显示在慢查询日志很清楚。

如果是这种情况,那么接下来的步骤是:

  1. 通过EXPLAIN运行查询来查看引擎正在做什么
  2. 从查询运行的地方找出。

如果您的慢查询日志没有显示任何内容,那么该查看其他地方了。

您可以使用nagios,cacti或mrtg来监视以太网接口上的数据吞吐量,接口状态,磁盘传输等等。这些工具可以很容易地configuration为提供graphics(cacti,mrtg)或发送警报消息(cacti,nagios)某些阈值被超过。

分析慢查询日志是一个好主意。

我的胆量告诉我,虽然你正在使用MyISAM存储引擎为你的表,突然间删除/更新/插入活动与一些长期运行的select结合起来…导致MyISAM的各种时髦的东西,而与InnoDB一切都保持稳定。

虽然其他人提供的build议是坚实的,但使用不同于慢速查询日志的方法可以更好地完成正在进行的诊断。 这是一个最适合作为正常应用程序维护的一部分监视缓慢查询调优的工具。

这听起来像你有一个查询运行效率低,或只是处理一个大型的数据集。 查询变慢时,运行show full processlist; 并按时间长度sorting。 这应该允许您确定导致其他人执行更长时间的查询。

如果你没有安装mytop这样的工具,你可以使用这个命令根据运行的时间长度进行sorting:

 mysql -e 'show full processlist;' |sort -n -k 6 

一旦你确定了错误的查询,你可以考虑最好的补救方法,只需调整查询,创build一个索引,甚至修剪数据集。

架构在这种情况下也有重要的作用。 OLAP查询最好在辅助数据库上完成,而不是在OLTP数据库上完成。

您可以使用mk-query-digest来parsingMySQL日志并加以分析。
也有适当的监控解决scheme(如Nagios)将极大地帮助你(与MySQL插件)。

我已经使用mytop来经常慢速查询。 当我们的网站pipe理员开始抱怨(虚拟)mysql服务器的性能时,我礼貌地问他们一起来观看mytop的输出。 我们发现罪魁祸首很容易就像这样,从那里你知道下一步可以做什么。

Mytop和慢速查询日志是开始的好地方。 结合OpenNMS / Nagios / Cacti等系统监控/日志logging/graphics(适当删除)解决scheme,您可以开始更好地了解发生问题时发生的情况。

同样值得设置Apache mod_status来显示Apache在发生速度降低时处理哪些请求,但是您必须注意并观察它发生的情况。 这个和MySQL运行时variables的输出也可以集成到OpenNMSgraphics中,以进一步提高这种洞察力。

性能调整

 * change parameters in /etc/mysql/my.cnf o thread_stack=196K o query_cache_limit=2M o query_cache_size=64M 

根据您的需要尝试这个

如果查询非常慢尝试(禁用反向dns查找)

  skip-name-resolve 

如果它工作,你应该考虑检查DNSconfiguration,而不是使用这个选项