MySQL体系结构
innodb体系结构
参考文档:https://www.cnblogs.com/harda/p/16995868.html
-
innodb引擎架构图
逻辑结构
- 逻辑存储结构
跟Oracle类似,分表空间–>段–>区–>页 -->数据行
物理结构
show variables like ‘%innodb_file_per_table%’ ;
查询所有的表空间、文件名和文件类型:
SELECT TABLESPACE_NAME, FILE_NAME, FILE_TYPE FROM INFORMATION_SCHEMA.FILES;
innodb_file_per_table控制每张表是否是一个数据文件。
- 每个库一个文件夹。
- ib_logfile[0-N] 是redo log,循环写。
- ibdata1是系统表空间。
- ibtmp1是临时表空间。
- undo_00x是undo表空间:mysql 5.7 默认undo表空间是0, innodb_undo_log_truncate是关闭的;MySQL 8.0默认是2,而且innodb_undo_log_truncate默认是开启的。
- #ib_16384_0.dblwr 是double write 表空间,从 8.0.20 开始才有自己独立的表空间,之前都是在系统表空间(ibdata1)。
MySQL 5.7 修改undo tablespace个数,重启会报错:
2023-03-08T03:18:27.182083Z 0 [ERROR] InnoDB: Expected to open 2 undo tablespaces but was able to find only 0 undo tablespaces. Set the innodb_undo_tablespaces parameter to the correct value and retry. Suggested value is 0
2023-03-08T03:18:27.182114Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2023-03-08T03:18:27.782871Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2023-03-08T03:18:27.782922Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2023-03-08T03:18:27.782930Z 0 [ERROR] Failed to initialize builtin plugins.
2023-03-08T03:18:27.782935Z 0 [ERROR] Aborting
在MySQL 5.7 版本中,一旦进程初始化完之后,就不允许修改了。
内存结构
后台线程
后台线程包括了 Master Thread,Page Cleaner Thread,Read thread/Write Thread,Redo log Thread 和 Change buffer Thread
- Master Thread 主要负责将缓冲池中的数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新、合并插入缓冲。
- Page Cleaner Thread 将原本放在 Master Thread 中进行的脏页刷新操作翻到了单独的线程中来完成,是 InnoDB1.2.x版本后引入的。
- Read thread/Write Thread 是数据库的读写请求线程,默认值都是4个,如果使用高转速磁盘,可适当调大该值。
- Redo log Thread 负责把日志缓冲中的内容刷新到 redo log 文件中。
- Change buffer Thread 负责把插入缓冲中的内容刷新到磁盘
评论区