innodb_io_capacity 脏页刷盘控制

在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或者刷完当前所有脏页。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值