InnoDB的关键特性

1、插入缓冲(Insert Buffer)
对于非聚集索引页的插入或更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在则直接插入;若不在则先放入到一个Insert Buffer对象中。看似数据库这个非聚集的索引已经插入到叶子节点,实际并没有,只是存放在另一个位置。然后再以一定的频率和情况进行Insert Buffer和辅助索引页子节点的merge操作,这时通常能将多个插入合并到一个操作中(因为在一个索引页中),这就大大提高另对于非聚集索引的插入的性能。

Insert Buffer使用的两个条件:
1)索引是辅助索引
2)索引不是唯一索引

InnoDB从1.0.x版本开始引入Change Buffer,可将其视为Insert Buffer的升级。对于DML操作–INSERT、DELETE、UPDATE都进行缓冲。适用对象依然是非唯一的辅助索引。

2、两次写(Double Write)
doublewrite由两部分组成,一部分是内存中的doublewrite buffer,大小2M,另一部分是物理磁盘上共享表空间中连续的128个页,即两个去(extent),大小同样为2M。在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是会通过memcpy函数将脏页先复制到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次,每次1M顺序的写入共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘,避免缓冲写带来的问题。这个过程因为doublewrite页是连续的,所以是顺序写的,开销不大。
如果操作系统在将页写入磁盘的过程中发生了崩溃,在恢复过程中,InnoDB存储引擎可以从共享表空间中的doublewrite中找到该页的一个副本,将其复制到表空间文件,再应用重做日志。

3、自适应哈希索引(Adaptivve Hash Index)
InnoDB存储引擎会监控对表上各索引页对查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引AHi。AHI通过缓冲池的B+树页构造而来,因此建立的速度非常快,而且不需要对整张表构建哈希索引。InnoDB存储引擎会自动根据访问对频率和模式来自动地为某些热点页建立哈希索引。
AHI有一个要求,即对这个页对连续访问模式必须是一样的。访问模式一样是指查询的条件一样,若进行交替的两种查询,那么InnoDB存储引擎不会对该页构造AHI,此外AHI还有如下要求:
1)以该模式访问100次
2)页通过该模式访问了N次,其中N=页中记录*1/16

4、异步IO(Async IO)

5、刷新邻接页(Flush Neighbor Page)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值