我有两台服务器:一台运行 Apache,另一台仅运行 MySQL。我没有在其中任何一台上安装任何监控工具。
每隔一段时间,我的 SQL 查询就会变得非常非常慢(通常需要 0.3 秒才能运行完的查询现在需要 20 秒)。我不知道这是 MySQL 问题、CPU 问题,还是网络问题,因为它通常发生在没有人检查的时候,所以我正在寻找一个可以帮助我找出问题根源的监控解决方案。
谢谢。
答案1
首先要检查的是慢查询日志。您可能需要对其进行配置,因为我不确定它是否在所有版本的 MySQL 中都默认配置。默认设置通常是记录所有运行时间超过 3 秒的查询。
很可能您有一个运行时间非常长的特定查询,并且为许多其他查询锁定了表,这应该在慢速查询日志中非常清楚地显示出来。
如果是这种情况,那么接下来的步骤是:
- 运行查询
EXPLAIN
以查看引擎正在做什么 - 找出查询的运行位置。
如果您的慢速查询日志没有显示任何内容,那么是时候去其他地方寻找了。
您可以使用 nagios、cacti 或 mrtg 来监控以太网接口上的数据吞吐量、接口状态、磁盘传输等。这些工具可以轻松配置为在超过某些阈值时提供图表(cacti、mrtg)或发送警报消息(cacti、nagios)。
答案2
分析慢查询日志是一个好主意。
我的直觉告诉我,您正在使用 MyISAM 存储引擎来存储您的表,并且突然出现删除/更新/插入活动激增的情况,同时还伴随着一些长时间运行的选择......这导致 MyISAM 出现各种奇怪的事情,而使用 InnoDB 一切都保持稳定。
答案3
虽然其他人提供的建议非常可靠,但使用慢查询日志以外的其他方法进行诊断效果会更好。此工具最适合用于监控慢查询,以便作为正常应用程序维护的一部分进行调整。
听起来你正在运行的查询效率低下,或者只是在处理大量数据集。当查询变慢时,运行show full processlist;
并按运行时间长度排序。这应该可以让你确定导致其他查询执行时间更长的查询。
如果你没有这样的工具麦托普安装后,您可以使用此命令根据运行的时间长度进行排序:
mysql -e 'show full processlist;' |sort -n -k 6
一旦确定了有问题的查询,您就可以考虑最好的补救方法,即简单地调整查询、创建索引,甚至修剪数据集。
答案4
我用过麦托普经常出现慢查询。当我们的网站管理员开始抱怨(虚拟)mysql 服务器的性能时,我会礼貌地请他们一起来查看 mytop 的输出。这样我们就能很容易地找到罪魁祸首查询,然后您就知道下一步该怎么做了。