赞
踩
在MySQL5.1.X版本中,由于代码写死,因此最多只会刷新100个脏页到磁盘、合并20个插入缓冲,即使磁盘有能力处理更多的请求,也只会处理这么多,这样在更新量较大(比如大批量INSERT)的时候,脏页刷新可能就会跟不上,导致性能下降。
而在MySQL5.5.X版本里,innodb_io_capacity参数可以动态调整刷新脏页的数量,这在一定程度上解决了这一问题。
innodb_io_capacity参数默认是200,单位是页。该参数设置的大小取决于硬盘的IOPS,即每秒的输入输出量(或读写次数)。
至于什么样的磁盘配置应该设置innodb_io_capacity参数的值是多少,大家可参考表1-1。
说明:此参数支持动态改变,但需要SUPER权限。
另外,还可以动态调整该参数,如:
SET GLOBAL innodb_io_capacity = 2000;
源码中逻辑:判断IO是否空闲,如果空闲则buf_flush_batch( BUF_FLUSH_LIST,PCT_IO(100) );
如果脏页比例超过70,则 buf_flush_batch( BUF_FLUSH_LIST,PCT_IO(100) );
否则 buf_flush_batch( BUF_FLUSH_LIST,PCT_IO(10) );
由于SSD对于随机写的请求响应速度非常快,导致IO几乎没有堆积。也就让innodb误认为IO空闲,并决定全力刷写。
其中PCT_IO(N) = innodb_io_capacity *N% ,单位是页。因此也就意味着每10秒,innodb都至少刷innodb_io_capacity个page或者刷完当前所有脏页。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。