调试 MySQL 性能问题

调试 MySQL 性能问题

我负责一个 WordPress 网站,该网站每天的页面浏览量约为 10 万次。我们使用 Varnish 作为缓存层。最近,我们遇到了一个问题,MySQL 性能似乎随机地变慢直至停止,并导致我们的应用程序崩溃。以下是来自 New Relic 的图表,显示了昨天发生的一次中断:

应用程序性能图

上周已经发生过两次这种情况。网站可以正常运行一周,无需任何人接触生产服务器,然后突然发生这种情况。通常响应时间约为 500 毫秒,而这里峰值为 60K 毫秒(!)。通过停止 apache、让数据库冷却下来,然后重新启动 apache,可以解决此问题。

这并不是因为运行了更多查询,也不是因为运行了某个特定的慢查询并导致了这个问题。如果我采用 New Relic 报告的任何“慢查询”,并在其他任何时间运行它们,它们的速度都会非常快。以下是同一时间段内 MySQL 吞吐量的图表:

数据库吞吐量图

我检查了 WordPress 钩子和插件的统计数据,一切似乎都正常。

我的问题是,我应该从哪里开始查找?哪些 MySQL 设置可能导致此问题?这很可能是 MySQL 问题,还是更可能是应用程序问题?

答案1

在深入讨论特定应用之前,我先从基础知识开始。这并不需要花费很长时间或太多精力。

从一些基本/通用的服务器诊断开始。在此期间,top/iostat/atop/htop/iotop/free/df/vmstat 等。报告您的发现。我个人的偏好有atop很多(它也在后台运行并记录类似于 sysstat 的日志)。查看内存、交换、磁盘 IO、负载等……一切。

然后查看内核日志(或 dmesg 输出)和 syslog 消息等日志。

当所有其他方法都无法显示任何内容时,请查看 mysql 和您的 web 服务。

答案2

您是否将所有东西都放在一台机器上?您确定您的服务器没有交换吗?在出现问题时,您可以与 top 和朋友一起检查您的工作负载是否受到 CPU / 内存 / IO 限制吗?

您是否收集这些数据?如果没有,请开始安装 systat(sar 和相关程序),以便您可以在问题发生后检查整个系统发生了什么。

然后在 PHP 和 MySQL 上启用慢速日志记录:

1)https://stackoverflow.com/questions/8560579/how-to-monitor-slow-php-processes

2)https://stackoverflow.com/questions/11606972/how-can-i-enable-slow-query-log-on-my-server

有了这些数据,您可以查明最终的问题或更好地了解正在发生的事情,并更好地定位您的监控或调整您的设置 ecc。

答案3

除了上述其他工具外,我建议使用“mytop”来查看 mysql 在速度变慢时在做什么。它与 top 非常相似,并显示每秒查询数以及正在运行的查询等统计数据。

相关内容