MySQL高级--13--数据库缓冲池(buffer pool)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


数据库缓冲池(buffer pool)

DBMS 会申请占用内存来作为数据缓冲池,在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才可以访问。

在这里插入图片描述

1 缓冲池 vs 查询缓存

缓冲池和查询缓存是一个东西吗?不是。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.缓冲池如何读取数据

  1. 缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中
  2. 如果存在就直接读取
  3. 如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行读取。

在这里插入图片描述

3. 查看/设置缓冲池的大小

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 多个Buffer Pool实例

在这里插入图片描述

5. 引申问题

Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子。

在这里插入图片描述

6.调优策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. Buffer Pool的内存淘汰策略

Redis–06–持久化策略—内存优化策略
在这里插入图片描述
在这里插入图片描述

冷热分区的LRU策略

LRU链表会被拆分成为两部分,一部分为热数据,一部分为冷数据。冷数据占比 3/8,热数据5/8。

image.png

数据页第一次加载进来,放在LRU链表的什么地方?

放在冷数据区域的头部

冷数据区域的缓存页什么时候放入热数据区域?

MySQL设定了一个规则,在 innodb_old_blocks_time 参数中,默认值为1000,也就是1000毫秒。

意味着,只有把数据页加载进缓存里,在经过1s之后再次对此缓存页进行访问才会将缓存页放到LRU链表热数据区域的头部。

为什么是1秒?

因为通过预读机制和全表扫描加载进来的数据页通常是1秒内就加载了很多,然后对他们访问一下,这些都是1秒内完成,他们会存放在冷数据区域等待刷盘清空,基本上不太会有机会放入到热数据区域,除非在1秒后还有人访问,说明后续可能还会有人访问,才会放入热数据区域的头部。

8.Redo Log跟Buffer Pool的关系 重做日志 持久性

事务–04—MySQL事务日志----redo日志

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.更新操作的流程:

1.从存储引擎层,拿到数据,记录到Buffer Pool,进一步的返回给Server层

2.server层会把这个数据页里面的数据进行修改

3.调用存储引擎,记录到Buffer Pool

4.Redo Log Undo Log 记录

5.事务提交

image.png在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值