Buffer Pool

本文详细解释了MySQL中的BufferPool概念,涉及free链表存放空闲缓冲页,flush链表处理脏页同步,LRU链表记录最近访问,以及chunk和chunk使用策略。特别提到如何处理预读和全表扫描对LRU链表的影响。
摘要由CSDN通过智能技术生成

概念

MySQL在启动时向操作系统申请的一片连续的内存,默认128M。然后将这块内存分为一个一个缓冲页(16KB,因为页就是16KB的)。再为每个缓冲页创建对应的控制块用于管理。比如第一次查询数据之后,数据库中对应的数据页就加载到缓冲页,第二次查询就不用去数据库了,直接内存查到返回。

free链表

由空闲的缓冲页的控制块组成的链表,新增的时候就在这里面找空闲的内存

flush链表

由修改过的缓冲页(脏页)的控制块组成的链表。
:那什么时候将脏页数据同步到数据库呢?
:1、后台线程根据系统的繁忙程度,定时从flush链表刷新一部分到磁盘
2、当加载数据到缓冲池,发现没有空闲缓冲页时;先看LRU链表尾部是否有非脏页控制块(用户读取 的有可能是未刷新到磁盘上的脏页);也没有的话,会强制刷新LRU链表最后一个对应的缓冲页
3、后台线程定时扫LRU链表尾部的一些缓冲页控制块,发现脏页就刷新磁盘

LRU链表

用户查询过的缓冲页的控制块组成的链表,最新访问的在最前面。所以分为热区和冷区(37%)

在这里插入图片描述
:但是预读与全表扫描会破坏这种设计,怎么做呢?
:其实二者的整个过程分 加载和读两个过程,二者都会加载,加载的时候都是加载到冷区的头部。而预读不一定会读,但全表扫一定会读,所以提供了判断全表扫的规则:即当前后访问一个页的时间间隔<1000ms(默认),数据就不会去加载到热区

chunk

chunk和buffer pool都允许有多个,用完一个chunk再用下一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值