「来道题」InnoDB的特性

各位有梦想的阿猿大家好,我是初昕之旅,您技术成长之路上的好帮手。今天继续更新《来道题》系列,每天一道面试题,年薪百万来找你~

 InnoDB存储引擎作为MySQL数据库的默认存储引擎,在众多公司中都有着极其广泛的应用率,凡是考察到关系型数据库时,都绕不开InnoDB的相关特点。所以,InnoDB有哪些特性,是互联网服务端面试的一道重点考题。有的同学可以能回答出来,比如InnoDB和MyISAM的区别是InnoDB能够支持事务、支持外键等等,很不错,这确实是InnoDB的一些特点,但这远远不够,只是及格的水平,面试时这种回答的程度通常是热场级别的,面试官一般还会沿着这个问题继续往下问,这个时候还有多少同学能继续深挖答案呢?
今天我们就来讲一下InnoDB的自适应哈希索引、插入缓冲、刷新邻接表、二次写等四大特性。

自适应哈希索引

我们都知道,InnoDB中最基本的索引是B+树,每层非叶子节点仅存储下一层节点的值范围,直到叶子节点时才存储真实的数据。通常情况下,B+树对磁盘查询路径的稳定已经能支撑很大的吞吐量了,但对于存储引擎来说,显然会想要更进一步地优化性能,自适应哈希索引就诞生了。自适应哈希索引的应用场景是,当我们有一些热点页的查询,比如一些需要高频使用的数据项,这类查询可能会占我们所有的链接中很大的一部分,而这些查询的条件又是固定,比如都是WHERE id = 1。此时,InnoDB会将这些条件的语句存储下来,建立一个符合等值查询的哈希索引,当下次再有相同的查询语句过来时,首先去判断一下是否能够命中哈希索引,如果可以,则直接跳转到对应的数据页中;否则,则按常规的B+树,一层层地范围匹配,最后定位到数据页中。那么所谓自适应,也就是这种索引的建立是不需要我们应用层的研发来关注或变更的,它属于存储引擎内自身的优化手段。

插入缓冲

在操作系统的相关知识中,我们能知道文件是存在多级索引页的分层的,通过索引可以更快速地定位到文件内容。而我们数据库中数据表的变更,最终会对应到机器上一些特定文件的内容变更,每次的变更都会涉及通过索引页来定位的过程。InnoDB针对上述过程中增加了一个缓冲机制,针对非聚簇索引中的插入和删除操作,注意这里只涉及非聚簇索引,没有聚簇索引。同时,只有插入和删除操作,不包含更新。针对这类操作,如果其中一些操作是都属于同一个索引页的,那么这些操作会被合并起来,统一和文件层进行交互,减少I/O的次数,进而提升性能。所以为了满足这种合并,我们需要有索引页的缓冲,并且在真正执行文件层面的操作时,在缓冲池中进行操作的识别和分类,把相同索引页的操作合并起来,一起执行。

刷新邻接页

脏页是在内存中发生变更的数据,最终需要落盘到文件中来永久生效,也就是脏页的刷新。同样的,在InnoDB存储引擎中,有一个缓冲池来管理。每一个数据页都会有一个标记位,标记该页自从上次刷新后,是否有再次发生修改,如果有修改,则需要进行刷新脏页的动作。前面也提到了文件的多级索引,在物理层面的地址空间中,文件是有分区的,而一次刷新会涉及I/O的操作,同样是对性能有影响的。所以InnoDB在进行脏页刷新之前,会检测一下是否有相同区的脏页需要刷新,如果有则合并到一个操作里一起去进行,减少随机I/O,提升性能。 

二次写

同样也是发生在刷新脏页时,如果我们直接从数据页写入到文件中,在此耗时中如果发生了一些机器故障之类的问题,会产生部分写失效的问题。而这种问题通过redo_log等机制无法修复。所以InnoDB会在磁盘的共享表空间中开辟一块区域。这次我们不直接写文件,首先我们先将需要刷新的数据存储到缓冲池中,通过缓冲池,我们优先写刚才提到的共享表空间,之后再去写磁盘,而在此过程中,如果还是发生了数据库宕机等,可以在共享表空间内找到部分写失效的页的副本,用redo_log进行数据恢复。


那么以上就是我们讲解的InnoDB存储引擎的四大特性,我们最后再来简单回顾一下:

  • 自适应哈希索引:根据热点页的连续查询条件,创建适合等值查询的哈希索引
  • 插入缓冲:合并非唯一的非聚簇索引中同索引页的插入/删除操作,提升性能
  • 刷新邻接页:相同地址的脏页合并刷新,减少随机I/O
  • 二次写:刷新脏页时复制到双写缓冲,写共享表空间、磁盘,避免写部分页。

那么等下次面试时,如果各位同学能够回答出来以上的知识点,我相信面试官一定会对咱们刮目相看的,一看就是一个热爱学习、有思考的好工程师。每天一道面试题,年薪百万来找你~

附视频讲解:

「来道题」InnoDB的特性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值