MySQL学习记录《二》

上一篇讲解了Innodb存储引擎的执行流程。这篇细化Buffer Pool的运行原理

首先得先了解free链表,flush链表,LRU链表
free链表:从磁盘中把数据页刷到Buffer Pool的缓冲页时,需要判断哪些缓冲页是空闲的,free链表就记录着空闲的缓冲页。每次去free链表中取空闲缓冲页即可。
flush链表:Buffer Pool中的缓冲页更新完数据后,需要不定时更新到磁盘中,flush链表就记录者需要更新的缓冲页。

LRU链表:会定时的把缓冲页更新到磁盘中。LRU链表中有一部分是热数据,即经常访问的数据,有一部分是冷数据,即不怎么访问的数据。为什么要分为冷热数据,是因为有时候预读机制把不怎么访问的数据页也刷到了缓冲页,放在LRU链表头。还有就是selct * from table时,查询有关表数据的数据页。但后面都不怎么访问,而放在了LRU链表头,把经常访问的缓冲液给放在了链表尾,又被刷回了磁盘。所以分了冷热数据,每次刚从磁盘读上来的缓冲液放在冷数据,如果1s后还有请求访问,则放到热数据。
Buffer Pool的运行原理:SQL的请求都是在Buffer Pool中执行的。所以当请求来时判断Buffer Pool是否存在,不存在就去磁盘中把数据页刷到free链表中的缓冲页,然后更新后在添加到flush和LRU表,定时去把flush链表和LRU链表的冷数据刷到磁盘中。如果请求来时,发现无空闲缓冲页,就会去LRU中把缓冲页刷到磁盘。再把数据页刷上来。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值