第二章:InnoDB存储引擎

概述:

 

InnoDB存储引擎版本

 

InnoDB体系结构

InnoDB存储引擎有很多内存块,构成了一个大的内存池

后台线程

innodb是多线程的,不同后台线程处理不同任务。

Master Thread

 

IO Thread:

负责IO请求的回调处理。

Purge Thread:

事务被提交后,其所使用的undolog可能不再需要,该线程来回收已经使用并分配的undo页

Page Cleaner Thread:

将之前版本的脏页刷新操作都放入到单独的线程中完成。

内存

缓冲池

基于磁盘存储,以页方式管理。将从磁盘中读出的页存放在缓存池中。下次读到相同的页时,先判断是否在缓存池中,无则读取磁盘上的页。

修改页:先修改缓存池中的页,再将其刷新到磁盘中。(CheckPoint机制)

数据页类型有:索引页,数据页,undo页,插入缓冲等。

允许有多个缓冲池实例,增强数据库并发能力 。

 

LRU List,Free List,Flush List

LRU算法来管理缓冲池。将新页加入midpoint位置,在LRU列表的5/8处。old列表,midpoint,new列表(最为活跃的热点数据)。

问题:为什么不使用朴素的LRU算法?

 

innodb_old_blocks_time,表示新页会在多久之后加入LRU列表中的热端。

LRU列表管理已经读取的页,开始时所有的页都在Free列表中,先从Free列表中查找有无可用的空闲表,在Free中删除它,将它加入LRU列表中。

page made young:将页从LRU列表的old部分加入到new部分。

page not made young:因为innodb_old_blocks_time的原因,页没有从old移到new。

Free buffers +Database pages < Buffer pool size。

Buffer pool hit rate缓存池命中率,越接近缓存池运行状态越良好。

LRU列表中的页(存在于LRU列表中)被修改后,该页被称为脏页,即缓存池中的页与磁盘中的页数据不一致。

Flush列表中的页即为脏页列表。

重做日志缓存(redo log buffer)

将重做日志信息先放入到这个缓存区中,然后将其刷新到重做日志文件中。

 

额外的内存池

对内存的管理是通过一种称为内存堆的方式进行。即对一些数据结构本身的内存进行分配时,先从额外的内存池申请。该区域内存不够再去缓存池中申请。

Checkpoint技术

产生了脏页,将新版本的页从缓冲池中刷新到磁盘。(checkpoint是什么)

当事务提交时,先写重做日志,再修改页。若发生菪机,可通过重做日志进行恢复。

通过重做日志来恢复整个数据库系统的数据到宕机时刻的条件:

1.缓冲池可以缓存数据库中所有的数据

2、重做日志可以无限增大

3.宕机后数据库恢复的时间应该不能太久。

checkpoint技术的目的:

 数据库发生宕机不需要重做所有日志,因为checkpoint之前的页都已经刷新到了数据库中。只需要对checkpoint后的重做日志进行恢复。

此外,缓冲此不够时,LRU溢出最近最少使用的页,若该页是脏页,checkpoint即强制将其刷新回磁盘。

重做日志不可用的原因:当前事务数据库系统对重做日志的设计都是循环使用的,而非无限增大,只能将其覆盖重用。

两种checkpoint:

1.Sharp checkpoint:在数据库关闭时将所有脏页刷新回磁盘。。

2.Fuzzy checkpoint:只刷新一部分脏页。

.Fuzzy checkpoint还可再分:

 Master Thread工作方式

Loop:

 

 

 background loop

 若flush loop中也没有什么事情可以做了,InnoDB存储引擎会切换到suspend_loop,将Master Thread挂起,等待事件的发生。若用户启用(enable)了InnoDB存储引擎,却没有使用任何InnoDB存储引擎的表,那么Master Thread总是处于挂起的状态。

innodb_io_capacity 表示磁盘IO吞吐量。

 InnoDB关键特性(没太懂)


2.6.1插入缓冲

2.6.2两次写

2.6.3自适应哈希索引

2.6.4异步lO

2.6.5刷新邻接页

启动、关闭与恢复
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值