MySQL InnoDB 存储引擎
概述
- 支持事务
- 行锁设计
- 支持MVVC
- 支持外键
- 提供一致性非锁定读
体系架构
image.png- 后台线程(多线程模型)
- Master Thread
负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓存、UNDO页的回收。 - IO Thread
使用AIO处理写请求,IO Thread负责IO请求的回调处理 - Purge Thread
事务提交后,回收已经使用并且分配的undo页。
- Master Thread
- 内存
- 缓冲池
InnoDB是基于磁盘存储的,并将其中的记录按照页的方式进行管理,使用缓冲池技术来提高数据库的整体性能。(读取页的时候,将页放到缓冲池中(FIX操作),下次读缓冲池中的即可;修改页时,先修改缓冲池中的页,再以一定的频率刷新到磁盘(CheckPoint机制))- 缓冲池管理
数据库中的缓冲池通过LRU算法进行管理(LRU List),使用最频繁的页在LRU List的前端,当缓冲池中不能存放新读取到的页时,首先释放LRU列表尾端的页。
- 缓冲池管理
- 重做日志缓冲
InnoDB将重做日志信息放入该缓冲区,然后按照一定的频率将其刷新到重做日志文件。 - CheckPoint机制
- 缩短数据库恢复时间:
数据库宕机时,数据库不需要重做所有的日志因为CheckPoint之前的页都已经刷新回磁盘。 - 缓冲池不够用时,将脏页刷新到磁盘(Fuzzy CheckPoint 部分刷新)
当缓冲池不够用时,根据LRU算法,释放list尾端的页,若该页为脏页,则强制执行CheckPoint,刷新回磁盘。 - 重做日志不可用时,刷新脏页
因为重做日志不是无限增大的,当到达一定数量时,由第一条所述,数据库恢复不需要这部分重做日志,这部分就可以被覆盖重用,若此时重做日志还有用,那么强制产生CheckPoint,将缓冲池中的页至少刷新到当前重做日志的位置。
总结一下:缓冲池不够用时,将最少使用的脏页刷新回磁盘,释放该页;当重做日志不够用时,将缓冲池刷新到当前重做日志的位置,放弃一部分重做日志,用于新的重做日志;数据库关闭时,发生Sharp CheckPoint,全部刷新
- 缩短数据库恢复时间:
- 缓冲池
- InnoDB 关键特性
- 插入缓冲
- 两次写
- 自适应哈希索引
- 异步IO
- 刷新邻接页
网友评论