InnoDB---体系架构

一、后台线程

后台线程作用:负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,并将已修改的数据文件刷新到磁盘文件中。

分类:

Master Thread:负责将缓冲池中的数据异步刷新到磁盘中,保证数据的一致性。

IO Thread:负责InnoDB存储引擎中使用的AIO(Async IO 异步非阻塞)请求的回调(call back)处理。

Purge Thread:负责回收已经使用并分配的undo页。

Page Cleaner Thread:负责脏页的刷新操作。

二、缓冲池

缓冲池作用:本质是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响
InnoDB---体系架构_第1张图片

注意:对缓冲池中的操作刷新到磁盘并不是每次页发生更新的时候触发,而是通过Checkpoint的机制刷新回磁盘

配置参数:

innodb_buffer_pool_size---配置缓冲池大小
innodb_buffer_pool_instances---配置缓冲池实例

三、LRU List 、Free List 、Flush List

**LRU列表:**用来管理已经读取的页。
**Free列表:**用来管理未在LRU列表中的页。
**Flush列表:**用来管理将页刷回磁盘。

LRU列表使用的是优化LRU算法(midpoint insertion strategy),在LRU列表中添加了midpoint位置,每次新读取的页并不是直接放入LRU列表的首部,而是放入LRU列表的midpoint位置。等待innodb_old_blocks_time才会加入到LRU热端。
InnoDB---体系架构_第2张图片
参数:

innodb_old_blocks_pct ---设置midpoint位置
innodb_old_blocks_time ---设置加入热点数据的等待时间

Free列表,在数据库刚启动时,LRU列表是空的,这时所有的页存放在Free列表中,当需要从缓冲池中分页时,首先从Free列表中查找是否有可用的空闲页,若有则从Free列表中删除,放入到LRU列表中。

Flush列表,当LRU列表中的页被修改后,该页就变成了脏页,即缓冲池中的页和磁盘中的页的数据产生了不一致,数据库通过Checkpoint机制将脏页刷新回磁盘中,Flush列表就是脏页列表,脏页即存在Flush列表中也存在LRU列表中,两者互不影响。

你可能感兴趣的:(InnoDB)