Mysql突然放缓,有什么潜在的原因?

几天前,mysql突然间变得非常缓慢,在100ms以下的时间里完成了10多秒的查询,持续了一个小时左右,速度又恢复正常了。 什么可能导致这样的问题?

一些更多的信息:mysql版本是5.0.51a mysql数据库是在一个1.5 GB RAM的专用盒子上。 当mysql服务器很慢时,没有使用交换。

这里是数据库的mysqlreport http://pastebin.com/au6yMWqQ没有一个caching已满。

我注意到服务器用来parsing主机名的DNS服务器有时候有点迟缓。 这可能会有影响吗?

谢谢

有很多因素可能是造成这种情况的原因。

如果您可以自行测量查询,则慢速parsing器不应该有影响。 然而,当连接到服务器时,一个缓慢的parsing器肯定会起作用 – 如果用户根据它们连接的主机名获得访问权限。 MySQL还可以selectlogging连接的主机名。

mysql-report对索引没有太多的说明。 当我看到这种情况发生的时候,我通常会做的事情是,我花了很长时间的一个查询,然后运行EXPLAIN 。 如果它不使用任何索引,并且需要做一个完整的表扫描 – 我会看看是否能够添加一个索引,使其更快。 我已经看到索引之前偶然消失(有人删除它意外,升级脚本删除它,并没有把它之后,或类似)。

服务器可能以很多方式被超载:

  • 你的CPU指标是什么意思? 它是卡在IOWait,系统时间,用户时间,还是实际上是空闲的?
  • 根据数据库,它可能实际上是一个冷的查询caching,需要一些时间后重新启动服务器变暖。 如果数据变化很大,这种情况不太可能发生,但如果主要用于查找,则可能会发生这种情况。

它也可能是一系列locking表的查询 – 一次阻止查找发生在〜10秒之内。 如果将缓慢的查询logging到文件中,您可以获取有关信息。

这可能是MySQL中的一个错误。 certificate这一点有相当重的负担,但是却发生了。

你需要更多的数据来找出原因。 您需要CPU,内存,MySQL指标等指标。 我可以build议一个像Munin这样的监视工具吗? 有一个非常好的MySQL插件,它会给你有趣的数据,因为它发生。

也许最快捷的方式是真正感受到可能会啃噬你的MySQL服务器上的资源的是这个简单的命令:

 SHOW PROCESSLIST; 

它会告诉你什么MySQL进程是活动的,他们活动了多久,以及他们正在做什么。 任何时候,我的MySQL服务器已经不可思议了,SHOW PROCESSLIST是我的第一道防线。