【MySQL技术内幕】02-InnoDB体系架构

InnoDB存储引擎体系架构解析

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司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)缓冲。
  • ......

202303232330009461.png

后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值