我inheritance了一个运行centos的LAMP服务器,尽pipenetworkingstream量很小,但它随时都会随机挂起。
我已经安装了服务器密度来监视发生了什么事情,并发现挂起过程中发生以下情况:
对我的未经训练的眼睛,它看起来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议来优化你的查询。 在这里寻找导致临时表的条件。