1、脏页
linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。
2、后台线程
- Master Thread
核心后台线程,负责将缓冲池数据异步刷新到磁盘,保证数据一致性 - IO Thread
负责IO请求的回调处理 - Purge Thread
回收已经使用并分配的undo页 - Page CLeaner Thread
将脏页的刷新操作放到这个单独的线程中完成
3、内存
-
缓冲池
1、基于磁盘的数据库系统使用缓冲池技术提高数据库整体性能
2、是一块内存区域
3、页从缓冲池通过一种称为Checkpoint的机制刷新回磁盘
4、缓存的数据页类型有:索引页、数据页、undo页、插入缓冲页、自适应哈希索引页、InnoDB存储的锁信息、数据字典信息 -
LRU列表
对缓冲池的页进行管理,加入了midpoint位置,新读取到的页放入到LRU列表的midpoint位置 -
Free列表
当数据库刚启动时,LRU列表是空的,这时页都存放在Free列表中 -
Flush列表
脏页列表。注意:脏页既存在于LRU列表也存在于Flush列表,LRU用于管理缓冲池中页的可用性,Flush用于管理将页刷新回磁盘 -
重做日志缓冲
-
额外的内存池
4、Checkpoint技术
- 将缓冲池的脏页刷回磁盘
- Sharp Checkpoint发生在数据库关闭时将所有脏页刷新回磁盘
- 在InnoDB存储引擎内部使用Fuzzy Checkpoint进行页刷新,即只刷新一部分脏页而不是所有脏页回磁盘
5、InnoDB关键特性
- 插入缓冲
1、Insert Buffer和数据页一样也是物理页的一个组成部分