监控解决方案帮助解决 MySQL 查询速度慢的问题

监控解决方案帮助解决 MySQL 查询速度慢的问题

我有两台服务器:一台运行 Apache,另一台仅运行 MySQL。我没有在其中任何一台上安装任何监控工具。

每隔一段时间,我的 SQL 查询就会变得非常非常慢(通常需要 0.3 秒才能运行完的查询现在需要 20 秒)。我不知道这是 MySQL 问题、CPU 问题,还是网络问题,因为它通常发生在没有人检查的时候,所以我正在寻找一个可以帮助我找出问题根源的监控解决方案。

谢谢。

答案1

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

很可能您有一个运行时间非常长的特定查询,并且为许多其他查询锁定了表,这应该在慢速查询日志中非常清楚地显示出来。

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

  1. 运行查询 EXPLAIN以查看引擎正在做什么
  2. 找出查询的运行位置。

如果您的慢速查询日志没有显示任何内容,那么是时候去其他地方寻找了。

您可以使用 nagios、cacti 或 mrtg 来监控以太网接口上的数据吞吐量、接口状态、磁盘传输等。这些工具可以轻松配置为在超过某些阈值时提供图表(cacti、mrtg)或发送警报消息(cacti、nagios)。

答案2

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

我的直觉告诉我,您正在使用 MyISAM 存储引擎来存储您的表,并且突然出现删除/更新/插入活动激增的情况,同时还伴随着一些长时间运行的选择......这导致 MyISAM 出现各种奇怪的事情,而使用 InnoDB 一切都保持稳定。

答案3

虽然其他人提供的建议非常可靠,但使用慢查询日志以外的其他方法进行诊断效果会更好。此工具最适合用于监控慢查询,以便作为正常应用程序维护的一部分进行调整。

听起来你正在运行的查询效率低下,或者只是在处理大量数据集。当查询变慢时,运行show full processlist;并按运行时间长度排序。这应该可以让你确定导致其他查询执行时间更长的查询。

如果你没有这样的工具麦托普安装后,您可以使用此命令根据运行的时间长度进行排序:

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

一旦确定了有问题的查询,您就可以考虑最好的补救方法,即简单地调整查询、创建索引,甚至修剪数据集。

建筑在这种场景中也发挥着重要作用。 联机分析处理查询最好在辅助数据库上进行,而不是OLTP数据库。

答案4

我用过麦托普经常出现慢查询。当我们的网站管理员开始抱怨(虚拟)mysql 服务器的性能时,我会礼貌地请他们一起来查看 mytop 的输出。这样我们就能很容易地找到罪魁祸首查询,然后您就知道下一步该怎么做了。

相关内容