1、InnoDB存储引擎概述
InnoDB是事务安全的MySQL存储引擎。
通常来说,InnoDB存储引擎是OLTP应用中核心表的首选存储引擎。
InnoDB是一个高性能、高可用、高可扩展的存储引擎。
2、InnoDB体系架构
后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。
后台线程
InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务
# Master Thread
核心后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、UNDO页的回收等
# IO Thread
在InnoDB存储引擎中大量使用了AIO(Async IO)来处理写IO请求,这样可以极大提高数据库性能。而IO Thread的工作主要是负责这些IO请求的回调(call back)处理
1.0版本之前共有4个IO Thread,分别是write、read、insert buffer和log IO thread。1.0版本以后 read thread和write thread分别增加到了4个,分别使
用innodb_read_io_threads和innodb_write_io_threads参数进行设置,如:
可以通过命令 show engine innodb status; 观察InnoDB中的 IO Thread
可以看到 IO Thread 0位insert buffer thread。IO Thread 1为log thread。之后就是根据innodb_read_io_threads和innodb_write_io_threads参数来设置的读写线程,并且读线程的ID总是小于写线程。
# Purge Thread
事务被提交后,其所使用的undolog可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。
1.1以前,purge操作仅在Master Thread中完成。1.1以后,purge操作可独立到单独的线程中进行,以减轻Master Thread的工作,从而提高CPU的使用率以及提升存
储引擎的性能。用户可以在MySQL数据库的配置文件中添加如下命令来启用独立的Purge Thread:
[mysqld]
innodb_purge_threads=1
表示一个purge thread线程
1.1中设置为大于1,InnoDB存储引擎启动时也会将其设为1,并提示信息。1.2开始,InnoDB支持多个Purge Thread,目的是为了进一步加快undo页的回收。同时由
于Purge Thread需要离散的读取undo页,这样也能更近一步的利用磁盘的随机读取性能。
# Page Cleaner Thread
1.2.x版本中引入的。其作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。而其目的是为了减轻原Master Thread的工作及对于用户查询线程的
阻塞,近一步提高InnoDB存储引擎的性能。