MySQL高级--01_1--数据库缓冲池(buffer pool)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 数据库缓冲池(buffer pool)
- DBMS 会申请占用内存来作为数据缓冲池,在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才可以访问。
- 1 缓冲池 vs 查询缓存
- 缓冲池和查询缓存是一个东西吗?不是。
- 2.缓冲池如何读取数据
- 3. 查看/设置缓冲池的大小
- 4. 多个Buffer Pool实例
- 5. 引申问题
- 6.调优策略
- 7. Buffer Pool的内存淘汰策略
- 冷热分区的LRU策略
- 8.Redo Log跟Buffer Pool的关系 重做日志 持久性
- 9.更新操作的流程:
数据库缓冲池(buffer pool)
DBMS 会申请占用内存来作为数据缓冲池,在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才可以访问。
1 缓冲池 vs 查询缓存
缓冲池和查询缓存是一个东西吗?不是。
2.缓冲池如何读取数据
- 缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中
- 如果存在就直接读取
- 如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行读取。
3. 查看/设置缓冲池的大小
4. 多个Buffer Pool实例
5. 引申问题
Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子。
6.调优策略
7. Buffer Pool的内存淘汰策略
Redis–06–持久化策略—内存优化策略
冷热分区的LRU策略
LRU链表会被拆分成为两部分,一部分为热数据,一部分为冷数据。冷数据占比 3/8,热数据5/8。
数据页第一次加载进来,放在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.事务提交