admin管理员组文章数量:1611521
在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或者刷完当前所有脏页。
本文标签: innodbiocapacity脏页刷盘
版权声明:本文标题:innodb_io_capacity 脏页刷盘控制 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728621122a1166370.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论