在服务器上运行查询时,mysqld
进程会占用大量iowait CPU。我已经读过关于innodb_buffer_pool_size
设置的内容,使这个值高于默认的128M应该对减少iowait有积极的影响(因为它会将数据库信息缓存在内存中)。
我已经将innodb_buffer_pool_size
的值更改为3GB(并通过检查运行中的mysql
中的变量来验证设置),并且mysqld
进程的虚拟内存使用也相应增加,但我仍然看到很高的iowait数字(而且mysql只有很小的驻留内存占用)。
除了innodb_buffer_pool_size
之外,还有什么可以帮助减少iowait(读取操作)。
最佳答案
结果发现,我正在运行的一个查询中有一个Order By
子句,由于我返回的数据太大,Order By
强制在磁盘(而不是内存)上进行排序。我的修复方法是从查询中删除Order By
,并在应用程序的内存中进行排序。