Code前端首页关于Code前端联系我们

MySQL存储机制及工作原理图解 撤消日志

terry 2年前 (2023-09-26) 阅读数 48 #后端开发

撤消日志是实现MySQL事务的主要机制之一。

取消日志是交易准确性和一致性的保证。事务中更新数据的预操作实际上是先写入Undo log

本文通过一个技术示意图来分析:Undo log记录机制及工作原理

MySQL Undo log的存储机制及工作原理图解

01撤消日志

撤消日志概念和功能以逻辑方式记录数据库事务修改操作。它在事务执行期间存储旧值的备份,以便事务可以回滚。或者在并发检查需要时恢复数据的能力。

MySQL Undo log的存储机制及工作原理图解

当执行insert语句时,Undo Log会记录相反的delete语句。

例如:

假设用户在支付过程中发现支付金额有错误。此时,需要对交易进行逆转,并使用逆转日志中记录的旧值来恢复正确的支付金额。

-- 在事务中更新付款金额BEGIN;UPDATE payments SET amount = 100.00 WHERE id = 1;
-- 假设发现付款金额错误,需要回滚事务并恢复旧值ROLLBACK;

当撤销交易并使用撤销日志中存储的旧值时,数据库中的支付金额将恢复到交易开始前的状态,确保数据连续性。

02undo log的两个主要功能

  • 事务回滚:数据回滚操作(核心事务实现)。如果事务执行过程中出现错误或者需要回滚操作,可以将回滚日志恢复到事务提交前的数据状态,以应用事务回滚操作。
  • 并发控制:实现多个版本MVCC的并发控制。使用undo log,可以实现并发数据库事务的隔离性和一致性,避免读写数据时发生冲突。

03 日志撤销机制

日志存储撤销 分段管理和存储。

撤销日志控制可以通过以下参数实现:

show variables like '%innodb_undo%';

在InnoDB保存数据的文件中,包含一个回滚段,,每次都是。 1024 回滚段中撤消日志段(5.5版本以后 128 可以支持回滚段)。

每个返回段对应于一个或多个撤消日志文件,用于在提交事务之前保存数据和详细信息的快照。的交易操作。信息

,例如添加、更新或删除。

下图可以帮助大家更好的理解undo log的存储机制:

MySQL Undo log的存储机制及工作原理图解

在undo log中,存储的是数据更新前的记录,以及行ID、事务ID、回滚指针记录。

每次事务ID递增时,输入语句中的回滚指针第一次为NULL。第二次更新后,undo log回滚指针指向前一个undo log。

以此类推,形成一条undo log的回滚链,方便查询记录的历史版本。

04 回滚日志的工作原理

回滚日志属于逻辑日志,记录变更过程。例如:

  • 执行删除,回滚日志记录添加;
  • 执行更新,回滚日志记录反向更新。

在更新数据之前,MySQL会提前生成回滚日志,并不会在事务提交后立即删除回滚日志。这是因为您稍后可能需要反转。当执行ROLLBACK操作时,它会从缓存中删除。读取数据。

日志回滚 清除日志是通过后台清理线程进行回收的。

下面的图有助于理解。运行更新的详细过程请参见SQL中选择:

MySQL Undo log的存储机制及工作原理图解

  • 事务A:执行更新操作时,首先将更新捕获的数据备份到相应的回滚缓冲区中,然后回滚日志文件将使用回滚缓冲区显示在磁盘上。
  • 事务 B: 执行查询操作并直接从撤消缓冲区高速缓存中读取。当事务回滚时,首先直接从回滚缓冲区高速缓存中读取,而不是从磁盘读取。

05 总结

通过本文,我们了解并掌握了日志检索的记录机制和工作原理。

撤消日志是MySQL中极其重要的逻辑日志。 撤消日志以逻辑方式记录数据库事务修改操作,记录事务执行过程中的数据库事务修改操作。值的备份,以便在事务回滚或并发控制需要时可以恢复数据。

正确使用undo log可以显着提高数据库性能和并发控制。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门