侧边栏壁纸
  • 累计撰写 35 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MySQL体系结构

子曰
2023-06-12 / 0 评论 / 0 点赞 / 291 阅读 / 610 字 / 正在检测是否收录...

MySQL体系结构

innodb体系结构

参考文档:https://www.cnblogs.com/harda/p/16995868.html

  • innodb引擎架构图

    image-20230612142136629

image-20230612142207426

逻辑结构

25159600-482c9fa4db3ebdcf

  • 逻辑存储结构

跟Oracle类似,分表空间–>段–>区–>页 -->数据行

25159600-fc81b0c3b36d3909

物理结构

show variables like ‘%innodb_file_per_table%’ ;

image-20230612142425338

查询所有的表空间、文件名和文件类型:

SELECT TABLESPACE_NAME, FILE_NAME, FILE_TYPE FROM INFORMATION_SCHEMA.FILES;

innodb_file_per_table控制每张表是否是一个数据文件。

image-20230612142508830

image-20230612142522081

  • 每个库一个文件夹。
  • 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 版本中,一旦进程初始化完之后,就不允许修改了。

内存结构

image-20230612142608038

后台线程

后台线程包括了 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 负责把插入缓冲中的内容刷新到磁盘
0

评论区