mysqld导致机器locking与高艾奥瓦

我inheritance了一个运行centos的LAMP服务器,尽pipenetworkingstream量很小,但它随时都会随机挂起。

我已经安装了服务器密度来监视发生了什么事情,并发现挂起过程中发生以下情况:

  • 爱荷华州有一个100%的高峰。
  • mysql“临时磁盘表”的数量从14万下降到0。
  • 在Apache上没有负载(服务器甚至没有响应)

对我的未经训练的眼睛,它看起来mysqld是定期清除和locking整个服务器,而它做的磁盘IO(这是很慢,因为它是一个虚拟机)。

如何更改mysqldconfiguration来​​防止这种情况?

mysql“临时磁盘表”的数量从14万下降到0。

这些临时表是由应用程序创build的(即“CREATE TEMPORARY TABLE ….”)还是由数据库创build的(用于重新创build索引/sorting大型数据集时)。

调整configuration,以允许更多的内存sorting/更多的线程应该帮助(你如何做这取决于哪个引擎的表实施)。 mysqltuner.pl应该做出明智的build议。

但是,通过调整您的查询,您将获得更多的好处。

1)确保你的代码没有在非常大的表上禁用/启用索引(这可以提高初始填充表时的性能,并且可以改善在向表中添加行时的转换 – 但代价是丧失并发性)。

2)使用此脚本从慢查询日志中的查询中去除文字值,然后基于具有最高累积处理时间的查询区分优先级。

运行: mysqladmin -u root -p ext -ri 30 | grep Created_tmp_disk mysqladmin -u root -p ext -ri 30 | grep Created_tmp_disk

第一次运行会告诉你有多less磁盘临时表是自上次重新启动MySQL以来创build的。 然后它会告诉你在30秒的时间窗口中创build了多less个(直到你从Control-C中取出)。

如果这个值很大,并且一直变得越来越大,那么你可以把MySQL的tmpdir放到一个虚拟磁盘上,以缓解高负载。

更好的办法是按照symcbean的build议来优化你的查询。 在这里寻找导致临时表的条件。