目录
3.2File-Per-Table Tablesspaces
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的时候先去操作缓冲区,如果缓冲区没有数据会将磁盘中的数据加载回来,然后再存储在缓冲区中,我么在增删改的时候都去操作缓冲区,然后缓冲区中的数据 会以一定频率通过后台线程写道磁盘架构中进行永久化保存