Innodb关键特性之刷新邻接页

本文介绍了InnoDB存储引擎的刷新邻接页机制,该机制通过合并IO操作减少物理写入,适用于传统机械硬盘。但在固态硬盘环境下,由于其高IOPS,该特性可能导致不必要的写入。参数`innodb_flush_neighbors`用于控制这一行为,可以根据硬件类型调整。对于插入操作频繁的系统,该功能有益,但更新频繁的系统可能因此增加写入负载。建议根据实际工作负载和硬件配置调整该参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、工作原理

  当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,故该工作机制在传统机械磁盘下有着显著的优势。

  1、在写入次数基本不增加的情况下,增加了写入的量;

  2、加速了脏页的回收;

  3、充分利用double write每次1M写入的特征;

  4、这个功能打开以后会发现iostat里面的wrqm(合并写)这个值会比较高;

2、问题考虑

  1、是不是可能将不怎么脏的页进行了写入,而该页之后又会很快变成脏页?

  2、固态硬盘有着较高的 IOPS,是否还需要这个特性?

  为此,InnoDB 存储引擎从 1.2.x 版本开始提供了参数 innodb_flush_neighbors,用来控制是否启用该特性。对于传统机械硬盘建议启用该特性,而对于固态硬盘有着超高 IOPS 性能的磁盘,则建议将该参数设置为 0、即关闭此特性。

3、参数控制 :innodb_flush_neighbors

mysql>show variables like 'innodb_flush_neighbors';
+-------------------------+-----------------+
| Variable_name           | Value           |
+-------------------------+-----------------+
| innodb_flush_neighbors  | 1               |
+-------------------------+-----------------+

       1,表示打开了刷新邻接页的功能,顺带着刷新在 buffer pool 中位于磁盘上相同的 extend 区的相邻的脏页。

  0,表示关闭刷新邻接页

  2 ,表示刷新在 buffer pool 中位于磁盘上相同的 extend 区的脏页。

4、Flush neighbor page的影响

  1、 对于insert频繁的系统,这个功能比较适合

  2、 对于update频繁的系统,这个功能可能会带来一些副作用

    1、update顺带着刷新其他页;

    2、对于update频繁的表,这些页马上就脏了,白白浪费写负载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值