MySQL——InnoDB引擎架构

发布于:2025-04-11 ⋅ 阅读:(40) ⋅ 点赞:(0)

目录

1.InnoDB引擎架构

2.架构-内存架构 

2.1Buffer Pool

2.2Change Buffer

2.21ChangeBuffer意义 

2.3自适应hash 

2.4日志缓冲区

3.架构-磁盘架构

3.1System Tablespace

3.2File-Per-Table Tablesspaces

 3.3General Tablesspaces

3.4UndoTablespaces

3.5 Temporary Tablespaces

3.6Doublewrite Buffer Files 

3.7Redo Log

4.架构-后台线程

5.总结


1.InnoDB引擎架构

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。下面是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。

 

2.架构-内存架构 

2.1Buffer Pool

没有缓冲池,每一次操作都要去操作磁盘空间,造成大量的磁盘IO,非常浪费性能

2.2Change Buffer

子要针对非唯一二级索引,我们进行增删改操作,在BufferPool不存在的时候,不回去直接操作磁盘,先把数据的变更缓存在ChangeBuffer中,未来读取数据再合并到bufferpool

2.21ChangeBuffer意义 

与聚集索引不同,二级索引通常是非唯一的,并且以相对随机的顺序插入二级索引。同样,删除和更新可能会影响索引树中不相邻的二级索引页,如果每一次都操作磁盘,会造成大量的磁盘IO。有了changebuffer之后,我们可以在缓冲池中进行合并处理,减少磁盘IO

2.3自适应hash 

2.4日志缓冲区

参数:innodb_log_size;缓冲区大小

           innodb_flush_log_at_trx_commit;日志刷新到磁盘时机

3.架构-磁盘架构

3.1System Tablespace

3.2File-Per-Table Tablesspaces

每一个ibd文件都是duli的表空间

 3.3General Tablesspaces

通用表空间需要我们自己去创建,并且指定关联的表空间,用的不多了解一下就行

3.4UndoTablespaces

3.5 Temporary Tablespaces

3.6Doublewrite Buffer Files 

3.7Redo Log

4.架构-后台线程

磁盘架构和内存架构我们都了解了,那么内存架构是怎么写到是怎么写到磁盘架构呢

这主要作用就是后台线程

1.Master Thread

核心后台线程,负责调度其他线程,还负责将缓冲池中的数据异步刷新到磁盘中,保持数据的一致性,还包括脏页的刷新,合并插入缓存,undo页的回收

2.IO Thread

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

3.Purge Thread

主要用于回收事务已经提交了的undo log,在事务提交之后undo log肯能不用了,就用它来回收

4.Page Clear Thread

协助Master Thread刷新脏页到磁盘的线程,可以减轻MasterThread工作压力,减少阻塞

5.总结

当我们去操作MySQL的时候先去操作缓冲区,如果缓冲区没有数据会将磁盘中的数据加载回来,然后再存储在缓冲区中,我么在增删改的时候都去操作缓冲区,然后缓冲区中的数据 会以一定频率通过后台线程写道磁盘架构中进行永久化保存


网站公告

今日签到

点亮在社区的每一天
去签到