2
5
12
新手上路
本文介绍的崩溃恢复过程,包含 server 层和 InnoDB,不涉及其它存储引擎,内容基于 MySQL 8.0.29 源码。
具体会进行哪些收尾工作,取决于系统变量 innodb_fast_shutdown 的配置。
本文我们把系统表空间、独立表空间、undo 表空间中的页统称为数据页。
两次写通过系统变量 innodb_doublewrite 控制开启或关闭,本文内容基于该系统变量的默认值 ON,表示开启两次写。
Redo 日志文件中每个 block 的大小为 512 字节。
正常状态指的是 MySQL 崩溃之前,数据页最后一次正确的刷新到磁盘的状态。
64K = 4 * innodb_page_size,所以,每次从 Redo 日志文件读取的数据量取决于系统变量 innodb_page_size。
Redo 日志每个 block 的大小为 512 字节,block header 为 12 字节,block trailer 为 4 字节。 从 log buffer 的每个 block 中拷贝到 parsing buffer 的 block body 大小就是 512-12-4 = 496 字节,也就是每个 block 中存放的 Redo 日志数据部分。
这里的 max_memory 表示 hash 表能够使用的最大内存空间。
从上面的逻辑可以看到,一次预读最多只读 32 个数据页。
解释一下表空间的两个标识:表空间编号是给咱们人类看的,表空间 ID 是 MySQL 内部使用的,这两者不一样。
76845412 是什么?稍候介绍。
初始化事务子系统还包含其它操作,不在本文介绍的范围内。
有了独立 undo 表空间之后,位于系统表空间中的回滚段就已经不再使用了,所以不需要从系统表空间的回滚段中读取事务信息。
事务的收尾工作有哪些?清理已提交事务小节会介绍。
使用道具 举报
11
21
本版积分规则 发表回复 回帖后跳转到最后一页