跳至主要內容

说说InnoDB存储引擎的事务提交过程?

fangzhipeng约 557 字大约 2 分钟

InnoDB的事务提交过程涉及到多个组件,包括Buffer Pool、BinLog、UndoLog、RedoLog以及物理磁盘。事务的提交过程如下:

image-20240317210724949
image-20240317210724949

InnoDB 存储引擎在执行一次更新事务时,通常会遵循以下步骤:

  1. 开始事务: 更新事务开始时,会使用 START TRANSACTION 或者 BEGIN 语句开始一个新的事务。
  2. 生成 Undo 记录: 在进行更新操作之前,InnoDB 首先生成 Undo 记录。Undo 记录用于记录修改前的数据,以便在事务回滚时可以恢复数据。这样可以实现事务的原子性和一致性。
  3. 执行修改操作: 更新事务执行更新操作,包括插入、更新或者删除数据。在执行修改操作期间,会对受影响的数据行加锁,确保其他事务不能同时修改这些数据。
  4. 写入 Redo 日志: 在执行修改操作之后,InnoDB 将事务的修改操作记录到 Redo 日志中。Redo 日志记录了事务所做的修改,包括修改的位置和修改的内容。这样可以在系统崩溃后通过重放 Redo 日志来恢复已提交的事务。
  5. 当事务完成所有操作后,事务被提交。在提交事务时,是准备提交状态。这时redo日志会从缓存中Redo Log的物理日志
  6. 在事务提交之后,InnoDB会将事务的修改操作写入BinLog(归档日志)。
  7. 刷写到磁盘: InnoDB 将 Redo 日志中的数据刷写到磁盘,确保 Redo 日志记录已经持久化。通常会使用一种称为“刷写”(Flush)的操作,将内存中的 Redo 日志缓冲区中的数据刷写到磁盘上的 Redo 日志文件中。
  8. 完成事务: 提交事务后,InnoDB 完成了一次更新事务的执行过程。 在更新事务完成后,InnoDB 会释放之前加的锁定,使得其他事务可以访问被修改的数据。
方志朋_官方公众号
方志朋_官方公众号