MySQL的脏页

本文介绍了数据库中脏页的概念及其与干净页的区别,详细解析了InnoDB如何通过缓冲池管理内存页的不同状态,并探讨了InnoDB刷脏页的具体机制及控制策略。

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

什么是脏页?

当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。

什么是干净页?

内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。

什么情况下会刷脏页?

第一种是“redo log写满了,要flush脏页” 整个系统就不能再接受更新了,所有的更新都必须堵住。

第二种是“内存不够用了,要先将脏页写到磁盘” 这种情况是常态

第三种是mysql空闲时候

第四种是mysql正常关闭时候

InnoDB 用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:
第一种是,还没有使用的;
第二种是,使用了并且是干净页;
第三种是,使用了并且是脏页。

InnoDB 刷脏页的控制策略

innodb_io_capacity 它会告诉InnoDB你的磁盘能力 设置成磁盘的IOPS
innodb_max_dirty_pages_pct脏页比例上限,默认值是75%

Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total得到的

InnoDB的刷盘速度就是要参考这两个因素:一个是脏页比例,一个是redo log写盘速度

mysql刷脏页连坐机制

而 MySQL 中的一个机制,可能让你的查询会更慢:在准备刷一个脏页的时候,如果这个数据页旁边的数据页刚好是脏页,就会把这个“邻居”也带着一起刷掉;而且这个把“邻居”拖下水的逻辑还可以继续蔓延

使用的是SSD这类IOPS比较高的设备的话,建议把innodb_flush_neighbors的值设置成0
在 MySQL 8.0 中,innodb_flush_neighbors 参数的默认值已经是 0 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值