文章目录
2.1 InnoDB存储引擎的版本
InnoDB存储引擎包含所有MySQL数据库的二进制发行版本中,早期版本随着MySQL数据库的更新而更新,在MySQL5.1中,可以 支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可以称为老版本的InnoDB,另一个是动态加载的InnoDB版本,官方称为InnoDB Plugin,可以视为InnoDB 1.0.x版本。MySQL5.5版本中又将InnoDB的版本升级到了1.1.x。下表为InnoDB各版本功能对比:
版本 | 功能 |
---|---|
老版本 | 支持ACID、行锁设计、MVCC |
InnoDB 1.0.x | 继承上版功能,增加了compress和dynamic页格式 |
InnoDB 1.1.x | 继承上版功能,增加了Linux AIO、多回滚段 |
InnoDB 1.2.x | 继承上版功能,增加了全文索引支持、在线索引添加 |
2.2 InnoDB体系结构
2.2.1 后台线程
InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。
- Master Thread
Master Thread是一个非常核心的后台线程,主要负责将缓冲区中的数据异步刷新到磁盘,保持数据的一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、UNDO页的回收等。 - IO Thread
InnoDB存储引擎使用了AIO(异步IO)来处理IO请求,这样可以提高数据库的性能。而IO Thread的工作主要是负责这些IO请求的回调。InnoDB 1.0版本之前有4个IO Thread,分别是write、read、insert buffer和log IO thread。IO Thread的数量不断进行调整,从InnoDB 1.0.x版本开始,read thread和write thread分别增大到了4个,在windows系统中可以通过innodb_read_io_threads
和innodb_write_io_threads
参数进行设置,如:
通过命令SHOW ENGINE INNODB STATUS;
来查看InnoDB中的IO Thread;
I/O thread 0 state: wait Windows aio (insert buffer thread)
I/O thread 1 state: wait Windows aio (log thread)
I/O thread 2 state: wait Windows aio (read thread)
I/O thread 3 state: wait Windows aio (read thread)
I/O thread 4 state: wait Windows aio (read thread)
I/O thread 5 state: wait Windows aio (read thread)
I/O thread 6 state: wait Windows aio (write thread)
I/O thread 7 state: wait Windows aio (write thread)
I/O thread 8 state: wait Windows aio (write thread)
I/O thread 9 state: wait Windows aio (write thread)
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0]