innodb_lru_scan_depth 定义了 LRU 的空闲page 的数量,并且是每个 buffer_pool 的数量。
假设有8个 buffer_pool , 那么 每个 buffer_pool 的尾部都必须保持有 innodb_lru_scan_depth(默认1024)个 空闲buffer page。
如果空闲的buffer_page少于 1024个, 那么就会将这些在尾部的1024中的非空闲 buffer 清除掉, 这些 buffer page 中
有些是可以直接清除的,有些是脏块,那么这些脏块就必须得刷新到磁盘。
这个时候,innodb刷新的数量就是由参数 innodb_io_capacity 来控制(当然刷脏的范围肯定不止LRU),一般默认是200,
如果LRU中需要刷新的脏块特别多,8个buffer pool 加起来的脏块超过200,那么就分几次刷新。
如果磁盘IO 比较给力的话,可以提升innodb_io_capacity这个参数的值,可以提升IO性能。
另外 刷脏的数量还与另一个参数有关 , innodb_idle_flush_pct ,即 innodb_io_capacity的百分比。默认值是100,那就是100%的意思。
比如设置innodb_io_capacity=600,设置innodb_idle_flush_pct=60,那么InnoDB 1次刷脏的页数为360。
以上就是这2个参数产生关联的地方。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




