InnoDB---体系架构

本文深入探讨InnoDB存储引擎的内部工作原理,包括后台线程的功能、缓冲池的作用及配置,以及LRU、Free和Flush列表的管理机制,揭示InnoDB如何通过这些组件提升数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、后台线程

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

分类:

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列表中,两者互不影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值