作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
InnoDB各版本功能对比
| 版本 | 功能 |
| 老版本 InnoDB(MySQL5.1之前) | 支持 ACID 、行锁设计、 MVCC |
| InnoDB 1.0.x (MySQL5.1) | 继承了上述版本所有,增加了 compress 和 dynamic 页格式 |
| InnoDB 1.1.x (MySQL5.5之前) | 继承了上述版本所有功能,增加了 Linux AIO 、多回滚段 |
| InnoDB 1.2.x (MySQL5.6) | 继承了上述版本所有功能,增加了全文索引支持、在线索引添加 |
| InnoDB 5.7 (MySQL5.7) | 继承了上述版本所有功能,支持buffer pool动态调整大小 |
图简单显示了 InnoDB 的存储引擎的体系架构,从图可见,InnoDB 存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作:
- 维护所有进程/线程需要访问的多个内部数据结构。
- 缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存。
- 重做日志(redo log)缓冲。
- ......

后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下 InnoDB 能恢复到正常运行状态。
1、后台线程
InnoDB 存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。
1.1、Master Thread
Master Thread 是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、 UNDO 页的回收等。
1.2、IO Thread
在 InnoDB 存储引擎中大量使用了 AIO ( Async IO )来处理写 IO 请求,这样可以极大提高数据库的性能。而IO Thread 的工作主要是负责这些IO请求的回调(call back) 处理。 InnoDB 1.0 版本之前共有 4 个IO Thread ,分别是 write 、 read 、 insert buffer 和 log IO thread 。在 Linux 平台下,IO Thread 的数量不能进行调整,但是在 Windows 平台下可以通过参数 innodb_file_io_ threads 来增大 IO Thread 。从 InnoDB 1.0.x 版本开始,read thread 和 write thread 分别增大到了 4 个,并且不再使用innodb_file_io_ threads 参数,而是分别使用 innodb_read_io_threads 和innodb_write_io_threads参数进行设置,如:
mysql> show variables like 'innodb_%io_threads';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| innodb_read_io_threads | 4 |
| innodb_write_io_threads | 4 |
+-------------------------+-------+
2 rows in set (0.01 sec)
可以通过命令SHOW ENGINE INNODB STATUS来观察InnoDB 中的IO Threads:
mysql> SHOW ENGINE INNODB STATUS\G
......
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: w
InnoDB存储引擎体系架构解析

最低0.47元/天 解锁文章
631

被折叠的 条评论
为什么被折叠?



