1.InnoDB 体系架构
- 维护所有进程、线程需要访问的多个内部数据结构
- 缓存磁盘上的数据,方便快速读取,同时在对磁盘文件的数据修改之前在这里缓存
- 重做日志(redo log)文件
后台线程
- Master Thread:将缓存池中的数据异步刷新到磁盘,保证数据的一致性
- IO Thread:InnoDB 中使用异步IO(AIO)来处理IO请求
- Purge Thread:回收已经使用并分配的undo页 ??
- Page Cleaner Thread:将之前版本中Master Thread中的脏页刷新操作放入到该线程完成
脏页:缓存池中的页和磁盘上的页数据不一致,即对缓存池中的页进行了修改操作
内存
- 缓存池
数据文件是按照页的方式存储在磁盘上的,在数据库系统中,由于CPU 与 磁盘之间的速度鸿沟,基于磁盘的数据库系统通产使用缓存池(一块内存区域)的技术来提高数据库的整体性能。
缓存磁盘上的数据,方便快速读取
对于页的修改操作,首先修改缓存池中的页,然后再以一定的频率刷新到磁盘上(刷新回磁盘的操作并不是每次修改页时触发的,而是一种称为 Checkpoint 的机制刷新回磁盘)
- 缓存池的管理
- LRU(Latest Recent Used,最近最少使用)算法:频繁使用的页在列表前段,最少使用的在后端。
2.Checkpoint 技术
- Checkpoint 技术的目的是解决以下几个问题
1) 缩短数据库的恢复时间
2) 缓存池不够用时,将脏页刷新到磁盘
3) 重做日志不可用时,刷新脏页
重做日志(Redo log):记录数据页的修改信息,防止数据丢失。当由于发生宕机而导致数据丢失时,通过重做日志来完成数据恢复
Undo log:记录数据页被修改前的信息,可以使用undo日志来实现回滚操作,保证事务的一致性
- Checkpoint 分类
1)Sharp Checkpoint:数据库关闭时将所有脏页刷新回磁盘
2)Fuzzy Checkpoint:运行时只刷新一部分脏页(InnoDB运行时使用)
3.Master Thread的工作方式
内部由多个循环组成
1)主循环:
- . 分为每秒操作:刷新日志缓存(redo log)(总是),至多刷新100个脏页(可能),合并至多插入缓存(可能)。
- . 每10秒操作:基本操作就是,刷新日志缓存(redo log)(总是),刷新100个脏页(可能),合并至多5个插入缓存(总是),删除无用的Undo页(总是),刷新100个或10个脏页(总是)。
2)后台循坏:数据库空闲或关闭的时候,切换到该循环
3)刷新循环
4)暂停循环
4.InnoDB关键特性
-
插入缓存
Insert Buffer使用必须同时满足:
1)索引是辅助索引
2)索引不唯一 -
两次写
-
自适应哈希索引
-
异步IO
-
刷新邻接页