redo log 的执行流程
Redo log 是 InnoDB 存储引擎用于保证事务的持久性(Durability)的一种重要机制。它记录了事务对数据所做的所有修改操作,以便在系统崩溃时能够进行恢复。以下是 redo log 的执行流程:
- SQL 解析与优化: 用户发起 SQL 请求,MySQL Server 层对 SQL 进行解析和优化,生成执行计划。
- InnoDB 存储引擎执行: 执行计划交给 InnoDB 存储引擎执行。InnoDB 将修改操作记录到内存中的 redo log 缓冲区,同时在修改对应的数据页。
- redo log 写入: 当事务进行到一定程度(比如提交前),InnoDB 将 redo log 缓冲区的内容写入磁盘的 redo log 文件。这是一个顺序写的过程,相比随机写,顺序写对磁盘性能更友好。
- 事务提交: 在事务提交的时候,InnoDB 将事务的提交信息写入 redo log,同时将事务的状态设置为 prepare。
- 事务完成: 在 MySQL Server 层完成事务的提交操作后,InnoDB 将事务状态设置为 commit,表示该事务已成功提交。
- redo log 持久化: redo log 持久化是指将 redo log 文件的内容刷写到磁盘。这个过程可以是异步的,也可以是同步的(根据配置和系统的要求)。在某些情况下,MySQL 可能会使用 double write 技术,先将 redo log 的内容写到一个临时文件,再一次性写入 redo log 文件,以提高持久化的可靠性。
这样,通过 redo log 的记录机制,MySQL 可以在系统发生崩溃等异常情况下,通过 redo log 的内容进行恢复,确保事务的持久性。