MySQL的中BufferPool机制
2021-08-18 10:03:40 24 举报
MySQL的中BufferPool机制
作者其他创作
大纲/内容
检查是否有缓存
如果事务提交成功 数据库死机了 bufferPool的数据丢失,还未写入磁盘可以通过redlog恢复buuferPool
描述数据地址
连接器
数据行
哈表表key=表空间号+数据页号value=缓存页地址
字段
binlog日志
指针
prev
描述数据块
数据页 16kb
Server层
优化器
redo log日志顺序写
next
1.加载对应ID所在的整个数据页先判断之前是否已加载
用来记录被修改过的缓存页。它也是通过缓存页的描述数据块中的两个指针,让被修改过的缓存页的描述数据块,组成一个双向链表。每当缓存页修改后都会把它的描述数据库加入到flush链表中,后续都是要flush刷新 到磁盘上去的
磁盘文件多个数据页
数据页Page 16kb
Buffer Pool缓存池
一行数据
写入更新前旧值
2
4.加载到buffer pool
0
移动到热数据头部
槽位
定时获取冷数据页刷盘
LRU头指针
主键
Redo logBuffer
每当缓存页被修改后把它的描述数据库加入到flush链表
页目录
free记录空闲的缓存页
查询缓存
磁盘多个数据页
缓存页
放在冷数据区域的链表头部
1s之后再次访问
缓存页冷数据区域
7 准备提交事务写入磁盘
后台线程
8.准备提交事务binlog日志写入磁盘
InnoDB 引擎
undo log日志
数据页
6.写 redo log日志
缓存页热数据区域
5.更新内存数据
在加载数据页到缓存页时,没有可用的缓存页时,主动刷盘
管理连接和权限
9 写入commit标记 提交事务完成此标记保证事务提交后redo和binlog数据一致
3 获取一个空闲页
语法分析和词法分析
LRU尾指针
指向缓存池
基础节点
执行器
flush链表
数据页第一次被加载到缓存页
update一条更新语句
每个数据页都有一个目录里面根据数据行的主键存放了一个目录
chunk 默认128M
free链表count个缓存页基础节点
分析器
2.否加载数据页
保证事务提交失败后回滚和恢复bufferpool
生成执行计划选择索引
用于恢复数据库磁盘数据
3
0 条评论
下一页