一、后台线程
后台线程作用:负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,并将已修改的数据文件刷新到磁盘文件中。
分类:
Master Thread:负责将缓冲池中的数据异步刷新到磁盘中,保证数据的一致性。
IO Thread:负责InnoDB存储引擎中使用的AIO(Async IO 异步非阻塞)请求的回调(call back)处理。
Purge Thread:负责回收已经使用并分配的undo页。
Page Cleaner Thread:负责脏页的刷新操作。
二、缓冲池
缓冲池作用:本质是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响
注意:对缓冲池中的操作刷新到磁盘并不是每次页发生更新的时候触发,而是通过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_old_blocks_pct ---设置midpoint位置
innodb_old_blocks_time ---设置加入热点数据的等待时间
Free列表,在数据库刚启动时,LRU列表是空的,这时所有的页存放在Free列表中,当需要从缓冲池中分页时,首先从Free列表中查找是否有可用的空闲页,若有则从Free列表中删除,放入到LRU列表中。
Flush列表,当LRU列表中的页被修改后,该页就变成了脏页,即缓冲池中的页和磁盘中的页的数据产生了不一致,数据库通过Checkpoint机制将脏页刷新回磁盘中,Flush列表就是脏页列表,脏页即存在Flush列表中也存在LRU列表中,两者互不影响。