Mysql InnoDB 结构

1. Master Thread(老版本的基本逻辑,之后版本无非在此基础上做了一些细节调优,更加适应时代)

脏页刷新、合并插入缓冲、UNDO回收

每秒操作流程:

重做日志缓冲刷新到磁盘(记录操作)

合并插入缓冲

刷新100个脏页至磁盘(checkpoint)

如果当前没有用户活动,则切换到background loop

每十秒操作流程:

刷新脏页至磁盘

合并插入缓冲

重做日志缓冲刷新到磁盘

删除无用的undo页

 

2. IO Thread

使用AIO

 

3. Purge Thread

回收已经使用并分配的undo页

 

4. 缓冲池

结构:索引页、数据页、undo页、插入缓冲(insert buffer)、自适应hash索引、锁信息、数据字典信息

读: 缓冲池 -> 磁盘

写: 修改缓冲池 -> 以一定频率刷新脏页到磁盘上

缓冲池管理算法: LRU

 

5. 重做日志缓冲(持久性)

写:缓冲 -> 磁盘(重做日志文件)

时机:

Master Thread定时刷新

事务提交

日志缓冲池剩余空间小于50%

 

6. checkpoint

作用: 将缓冲池中的脏页刷到磁盘

时机:

Master Thread CheckPoint(以每秒/每十秒速度定时刷新一定比例,异步操作,用户操作线程不会被阻塞)

flush_lru_list checkpoint(LRU列表中需要一定数量的空闲页,当不够时会移除列表尾端页,如果存在脏页则需要checkpoint)

async/sync flush checkpoint(重做日志不可用的case:)

dirty page too much check point(脏页太多)

 

7. insert buffer

对于非聚集、非唯一的索引进行缓冲处理

写:先缓冲索引 -> 再刷新至磁盘

 

8. 聚集索引 + 辅助索引

聚集索引:按照主键构造的B+树,包行全部数据

辅助索引:叶子节点不包含行记录的全部数据,结构:key-value + 真实行数据标签

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值