mysql_innodb存储引擎关键特性


本文将简单介绍mysql innodb存储引擎的关键特性;
以帮助大家对innodb以及数据库底层的特效有大致的了解并学习其中的设计,方便后续做更深的学习和问题分析;

下面参考《mysql技术内幕 InnoDB存储引擎》,分享innodb引擎的关键特性:

插入缓冲

  • innodb基于聚簇索引的时候插入是顺序的,不需要磁盘的随机读写,但是对于非聚簇索引插入不再是顺序的来,性能会下降;
  • 对于非聚簇索引的插入或更新操作,不是每一次直接插入到索引页中,而是先判断是否再缓冲池种,在,直接插入,不在,先放到insert buffer中,然后根据情况按一定的频率进行buffer和辅助叶子节点的merge操作,就将多个插入合并到一个操作中,可以相应提升性能;
  • 使用条件:索引是辅助索引, 不是唯一索引;
  • Insert Buffer数据结构是一颗b+树,负责所有辅助索引的插入缓存,存放在共享表空间;
  • 当发现辅助索引页空间不大时,以及Master 进程定期会进行merge Insert Buffer,将其merge仅进物理内存;

两次写

  • doublewrite两部分组成,内存中的buffer以及物理磁盘上的共享表空间的2MB空间;
  • 对缓冲池的脏页刷新时,会先copy到内存中的doublewrite buffer,然后分两次写入磁盘上,然后调用fsync同步磁盘;
  • 当写入失效时(如宕机引起),先通过页的副本还原页,然后通过冲入日志重做,就是doublewrite;
  • doublewrite带给存储引擎数据也的可靠性;

自适应哈希

  • 存储引擎对访问的热点数据构建自适应哈希,提高速度;
  • 自适应哈希索引是通过缓冲池的B+树页构造而来,建立速度快;
  • 要求:对某个页的连续访问模式是一样的;

异步IO

  • 异步IO可以进行IOmerge, 提升性能;

刷新邻接页

  • 当刷新一个脏页时,检测所在区的所有也,如果是脏页,也一起刷新;

备注

  • 以上是对innodb存储引擎关键特性的一些介绍,大部分特效都是可以通过配置进行开关的,可以结合实际情况进行调整;
  • 如两次写,如果我们有其他高效的写失效防范机制,也可以考虑不适用这个特性;
  • 像异步的这些思想在我们的程序设计中都可以进行参考;
  • 同意像刷新邻接页的特性,我们在进行概率抽样处理的时候,也可以参考这个思想扩大抽样范围;

以上是对innodb关键特效的简单介绍,后续会继续进行相关简单和进阶知识的分享,欢迎一起讨论交流~


文章作者: Xudong Jiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xudong Jiang !
 上一篇
redis学习-基本介绍 redis学习-基本介绍
redis是使用简单、性能强大的非关系型数据库。下面简单介绍他的几个特性。后续会进行关于redis支持的数据结构、redis使用场景案例等的分享。 单线程 redis的一大特色,使得Redis服务端处理模型变得简单,而且也使得客户端开发变得
2017-05-30
下一篇 
mysql-innodb存储引擎体系结构介绍 mysql-innodb存储引擎体系结构介绍
本文简单介绍Innodb存储引擎的体系架构。 Innodb体系内含(参考图): 文件系统; 多个内存块组成的大的内存池; 后台线程 文件系统 数据存储再磁盘上的最终场所; 后台线程 Innodb是多线程的模型,后台有多个不
2017-05-22
  目录