缓冲池(buffer pool)

BufferPool是MySQL数据库的内存组件,用于缓存磁盘数据。脏页是指内存数据与磁盘不同步的页面,而干净页则相反。MySQL在redolog满、内存满、空闲时或正常关闭时会刷脏页到磁盘,保证数据一致性。

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

缓冲池(buffer pool

buffer pool 是数据库的一个内存组件,里面缓存了磁盘上的真实数据,Java系统对数据库的增删改操作,主要是这个内存数据结构中的缓存数据执行的。

什么时候会刷脏页

什么是脏页

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

什么是干净页

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

MySQL什么时候会刷脏页

(1)redo log满了

因为我们redo log日志是有固定空间的,如果它满了的话,就会进行刷脏页 (flush 脏页)。MySQL会先把内存数据更新到磁盘上,并把redo log进行清空。这种情况是 InnoDB所有更新会为0,因为出现这种情况的时候,整个系统就不能再接受更新了,所有的更新都必须堵住。

(2)内存满了

因为我们MySQL的缓冲池是有固定内存大小的,当我们缓冲池满了的时候,这时候也会进行刷脏页。而这时在内存中的数据会有三种类型数据页

第一种是,还没有使用的; 第二种是,使用了并且是干净页;第三种是,使用了并且是脏页。

而当要读入的数据页没有在内存的时候,就必须到缓冲池中申请一个数据页。这时候只能把最久不使用的数据页从内存中淘汰掉:如果要淘汰的是一个干净页,就直接释放出来复用;但如果是脏页呢,就必须将脏页先刷到磁盘,变成干净页后才能复用。

(3)mysql空闲的时候

这个时候就是我们MySQL比较空闲,没有请求的时候。这个时候redo log会flush 脏页,会把内存中的脏页更新到我们的磁盘里。

(4)mysql正常关闭的时候

因为我们MySQL正常关闭,肯定是要把内存脏页更新到磁盘中的。

————————————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值