几天前,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 。 如果它不使用任何索引,并且需要做一个完整的表扫描 – 我会看看是否能够添加一个索引,使其更快。 我已经看到索引之前偶然消失(有人删除它意外,升级脚本删除它,并没有把它之后,或类似)。
服务器可能以很多方式被超载:
它也可能是一系列locking表的查询 – 一次阻止查找发生在〜10秒之内。 如果将缓慢的查询logging到文件中,您可以获取有关信息。
这可能是MySQL中的一个错误。 certificate这一点有相当重的负担,但是却发生了。
你需要更多的数据来找出原因。 您需要CPU,内存,MySQL指标等指标。 我可以build议一个像Munin这样的监视工具吗? 有一个非常好的MySQL插件,它会给你有趣的数据,因为它发生。
也许最快捷的方式是真正感受到可能会啃噬你的MySQL服务器上的资源的是这个简单的命令:
SHOW PROCESSLIST;
它会告诉你什么MySQL进程是活动的,他们活动了多久,以及他们正在做什么。 任何时候,我的MySQL服务器已经不可思议了,SHOW PROCESSLIST是我的第一道防线。