innodb buffer_pool链表说明

buffer状态及其链表结构

page是 innodb磁盘 i/o的最小单位,数据是存放在page中的,那么对应到内存中就是一个个的buffer,每个buffer又分为三种状态。

free buffer:此状态下的buffer从未被使用,像一张白纸,但是在实际生产中,数据库很繁忙的情况下,freebuffer的状态基本是不存在的。

clean buffer:内存中的buffer里面的数据和磁盘page的数据一致。

dirty buffer:内存中新写入的数据还没有刷新到磁盘,跟磁盘中数据不一致。

buffer 在内存中是需要被组织起来的,有chain来管理,也就是链,innodb是双向链表结构,由三种不同的buffer状态衍生出了三条链表。

free list:把那些free状态的buffer都串联起来,在数据库真正跑起来的时候,每次把page调到内存中都会先判断free buffer的使用情况,
不过不够用了,就会从lru list和flush list链表中释放freebuffer,以获得新的空闲buffer.

lru list:lru list会把那些与磁盘树一致,并且最近最少被使用的buffer串联起来,释放出free buffer,page调到内存中便于使用新的可用buffer。

flush list:把那些dirty buffer串联起来,为了方便刷新线程把脏数据刷到磁盘。推进checkpoint lsn,使实例崩溃之后可以快速恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值