InnoDB存储引擎

InnoDB是事务安全的MySQL存储引擎,通常来说,它是OLTP(Online Transactional Processing,联机事务处理)应用中核心表的首选存储引擎。

一、InnoDB存储引擎概述

从MySQL5.5版本开始,InnoDB开始是默认的表存储引擎(之前的版本InnoDB存储引擎仅在Windows下为默认的存储引擎)。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在以及停止开发)。
特点:

  • 支持行锁
  • 支持MVCC
  • 支持外键
  • 提供一致性非锁定读

InnoDB上处理插入/更新操作的速度平均为800次/秒。这都证明了InnoDB是一个高性能、高可用、高可扩展的存储引擎。

二、InnoDB存储引擎的版本

InnoDB存储引擎包含于所有的MySQL数据库的二进制发行版本中。早期其版本随着MySQL数据库的更新而更新。从5.1版本开始,MySQL数据库允许存储引擎开发商以动态方式加载引擎,这样存储引擎的更新可以不受数据库版本的限制
所以在5.1中,可以支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可以看成是老版本的InnoDB,另外一个是动态加载的版本,可以将其看成InnoDB1.0.x版本,官方称为InnoDB Plugin。
MySQL5.5版本中又将InnoDB的版本升级到了1.1.x。而后最近的MySQL5.6版本中,InnoDB的版本也随着升级为1.2.x版本。
MySQL技术内幕-InnoDB存储引擎-第二章、InnoDB存储引擎
由于不支持多回滚段,InnoDB Plugin支持的最大支持并发事务数量也被限制在了1023。

三、InnoDB体系架构

下图显示了InnoDB的存储引擎的体系结构,从图中可看出,InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作:

  • 维护所有进程/线程需要访问的多个内部数据结构
  • 缓存磁盘上的数据,方便快速的读取,同时在对磁盘文件的数据修改之前在这里缓存。
  • 重做日志(redo log)缓冲。

  • MySQL技术内幕-InnoDB存储引擎-第二章、InnoDB存储引擎

后台线程的主要作用是负责刷新内存池中的数据,保证缓存池中的内存缓存的是最近的数据,此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。

1、后台线程

InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。

Master Thread(主要负责将缓存池数据刷新到磁盘)

Master Thread是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。包括脏页的刷新、合并插入缓冲、UNDO页的回收等。

IO Thread(主要负责写IO请求的回调处理)

在InnoDB存储引擎中大量使用了AIO(Async IO)来处理写IO请求,这样可以极大提高数据库的性能。而IO Thread的工作主要是负责这些IO请求的回调处理。

在InnoDB1.0版本之前共有4个IO Thread,分别是write、read、insert buffer和log IO thread。在Linux平台下,IO Thread的数量不能进行调整,但是在Windows平台下,可以通过参数innodb_file_io_threads来增大IO Thread。从InnoDB1.0.x版本开始,read Thread和write Thread分别增大到了4个,并且不再使用innodb_file_io_threads参数,而是分别使用innodb_read_io_threads和innodb_write_io_threads参数进行设置,如:
MySQL技术内幕-InnoDB存储引擎-第二章、InnoDB存储引擎
MySQL技术内幕-InnoDB存储引擎-第二章、InnoDB存储引擎

相关文章: