MySql学习(七)-InnoDB的关键特性

                                           InnoDB的关键特性

Inno存储引擎的关键特性包括:插入缓冲,两次写(Dubbo write)、自适应Hash索引。这些特性为InnoDB存储引擎带来了更好的性能和更高的可靠性。

1、插入缓冲

插入缓冲是InnoDB中最让人激动的特性。插入缓冲不只是缓冲池的中的一部分,InnoDB缓冲池中有Insert Buffer信息,但是Insert Buffer和数据页一样,也是物理页的一个组成部分。

主键是行唯一的标志符(一般我们用自增键来做主键),行记录的插入是按照主键递增的顺序进行插入的,因为插入聚集索引一般是顺序的,不需要磁盘的随机读取,所以如果只有一个主键索引的话插入的话是非常快的。

但是,一个表中不可能只有一个聚集索引,一张表中还有多个非聚集的辅助索引(secondary Index),非聚集索引在插入时,叶子节点的插入不再是顺序的,就需要离散的访问非聚集索引页,会影响到插入的性能。

InnoDB设计的插入缓冲,对于非聚集索引的插入或更新操作,不是每一次直接插入索引页中,而是先判断非聚集索引在是否在缓冲池中。如果在,则直接插入;如果不在,则先放入一个插入缓冲区(好似欺骗数据库这个非聚集索引已经插入到叶子节点),然后再以一定的频率执行插入缓冲和非聚集叶子节点的合并操作。这样就将多个操作合并为一个操作,大大提升了效率。

插入缓冲需要满足以下两个条件:1、索引是辅助索引  2、索引不是唯一索引(如果是唯一索引就要判断去重,造成离散读)

 

2、两次写

如果插入缓冲带给InnoDB存储引擎的是性能,那么两次写代给InnoDB的是可靠性。

当数据库发生宕机时,可能数据库正在写一个页面,假如页面只写了一部分,会导致数据丢失。

dubbo write 由两部分组成:一部分是内存中的dubbowrite buffer,大小为2MB;另外一部分是物品磁盘空间共享表空间中的连续的128个页,即两个区,大小同为2MB。

当缓冲池的脏页刷新时,并不直接写磁盘,而是通过memcpy函数将脏页先拷贝到内存中的Dubbo write buffer中,之后通过dubbowrite buffer再分两次,每次将1MB的写到 共享空间表的物理磁盘上,然后马上调用fsync函数,同步磁盘,避免缓冲写带来的问题。在这个过程中,dubbowrite页是连续的,所以开销不大。在完成dubbo write页的写入之后,再将dubbowrite buffer中页的写入各表空间文件中,此时的写入是离散的。

如果在写入磁盘的过程中崩溃了,在恢复过程中,InnoDB存储引擎可以从共享表空间中的dubbowrite找到该页的副本,然后将其拷贝到表空间中,再应用重做日志。

 

3、自适应Hash索引

hash是一种非常快速的查找方法,一般情况下复杂度为O(1)。常用于连接join操作。InnoDB提出了另外一种实现方法,自适应hash索引。

InnoDB存储引擎会监控表上对索引的查找,如果观察到简历hash索引可以带来速度的提升,就会简历hash索引,所以称之为“自适应的”。自适应Hash索引通过缓冲池的B+树构造而来,因此建立的速度非常快。而且不需要将整个表都建hash索引,InnoDB会根据访问的频率和模式来为某些页简历hash索引。

官方文档显示,自适应hash索引的功能,会提升2倍的读取和写入速度,对于辅助索引的链接操作,可以提升5倍性能,其设计思想源于数据库自动优化。

值得注意的是,hash索引的查询,只能用于搜索等值的查询。

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 24582, seg size 24584, 708160 merges
merged operations:
 insert 1741884, delete mark 3568870, delete 641149
discarded operations:
 insert 0, delete mark 0, delete 0
0.02 hash searches/s, 8.12 non-hash searches/s
---

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值