【MySQL 02】InnoDB 的 Buffer Pool 学习

MySQL的InnoDB存储引擎使用Buffer Pool来提高数据访问效率,缓存数据页以减少磁盘交互。Buffer Pool包括Free链表、Flush链表和LRU链表,管理缓存页状态。脏页通过Flush链表进行管理,并由后台线程定时刷盘。多个Buffer Pool实例可提升并发处理能力。预读服务可能导致低频页挤出高频页,为此InnoDB采用分区策略优化LRU链表,避免劣页驱逐良页。
摘要由CSDN通过智能技术生成

本文主要有以下内容:

Buffer Pool 结构介绍 Free、Flush、Lru 链表介绍

写下本文的原因主要是因为在总结事务相关知识的时候,提到了这一块的相关知识,本来打算 事务 + Buffer Pool 一起总结的,但是内容太多,就分成两篇!下周上事务相关的总结知识吧!

Buffer Pool

为什么需要 Buffer Pool:因为 CPU 和磁盘交互非常耗费时间,因此为了提高效率,会将数据页缓存在 Buffer Pool中,这样在继续访问相同的数据页时,便不会再从磁盘加载数据页。

Buffer Pool:是一片连续的内存空间,可以在启动MySQL时在 server 下通过此innodb_buffer_pool_size = 268435456指定,单位是字节,用于缓存数据页。

Buffer Pool 的内部结构

在 Buffer Pool 中,每一页的大小和数据页的大小一致,默认为 16 kb,每一个缓存页由一个控制块所控制。实际结构如下图:

 

由于是一片连续的内存空间,因此很有可能出现一块内存大小不足以满足 一个页的 + 控制块的大小,自然而然这片区域就没法用到。因此就被称为碎片区。

Free 链表

为了更好的管理这些缓存页,我们就必须先知道当前缓存页的状态,如是否空闲,当前缓存页是否被修改等,因此设计了 Free 链表,可以帮我们快速定位当前缓存页中哪些缓存页还没有被使用,是可以拿来使用的!其结构如下:

 

  • 链表基结点:记录了链表开始的位置、结束的位置以及链表中节点的数量。占据 40 个字节。不包含在 buffer pool 申请的内存空间里。
  • 每个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值