MySQL InnoDB 缓冲池 buffer pool,程序员必备技能:时间复杂度与空间复杂度的计算

预读

MySQL是以页(16K)为单位读取磁盘数据放入buffer pool的,按页读取不仅能提高性能,还遵守“集中读写”的原则能把一些“可能要访问”的页提前加入缓冲池,避免未来的磁盘IO操作。

LRU链表

MySQL是用LRU(Least recently used)算法来管理这些缓存页的。并将LRU链表分为young和old两个区域。首次从磁盘上加载到buffer pool的页放到老年代头部,如果数据被访问则加到新生代的头部;如果数据没被访问则会被逐渐移到老年代尾部直到淘汰。

注意:在一定时间内访问初次加载到buffer pool的页不会被加到新生代的头部,这个时间由innodb_old_blocks_time变量控制。这是针对全表扫描时,短时间内访问大量使用频率非常低的页面情况的优化。

flush链表

如果修改了buffer pool中某个缓存页的数据,那它就和磁盘上的页不一致了,这样的缓存页被称为脏页(dirty page)。

buffer pool内创建一个存储脏页的链表,凡是修改过的缓存页对应的控制块都会作为一个节点加入到一个链表中,因为这个链表节点对应的缓存页都是需要被刷新到磁盘上的,所以也叫flush链表。

写缓冲(change buffer)

自我介绍一下,小编13

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值