MySQL存储机制及工作原理图解 撤消日志
撤消日志是实现MySQL事务的主要机制之一。
取消日志是交易准确性和一致性的保证。事务中更新数据的预操作实际上是先写入Undo log。
本文通过一个技术示意图来分析:Undo log记录机制及工作原理。
01撤消日志
撤消日志概念和功能以逻辑方式记录数据库事务修改操作。它在事务执行期间存储旧值的备份,以便事务可以回滚。或者在并发检查需要时恢复数据的能力。 当执行insert语句时,Undo Log会记录相反的delete语句。 例如: 假设用户在支付过程中发现支付金额有错误。此时,需要对交易进行逆转,并使用逆转日志中记录的旧值来恢复正确的支付金额。 当撤销交易并使用撤销日志中存储的旧值时,数据库中的支付金额将恢复到交易开始前的状态,确保数据连续性。 日志存储撤销 分段管理和存储。 撤销日志控制可以通过以下参数实现: 在InnoDB保存数据的文件中,包含一个回滚段,,每次都是。 1024 回滚段中撤消日志段(5.5版本以后 128 可以支持回滚段)。 每个返回段对应于一个或多个撤消日志文件,用于在提交事务之前保存数据和详细信息的快照。的交易操作。信息-- 在事务中更新付款金额
BEGIN;
UPDATE payments SET amount = 100.00 WHERE id = 1;
-- 假设发现付款金额错误,需要回滚事务并恢复旧值
ROLLBACK;
02undo log的两个主要功能
03 日志撤销机制
show variables like '%innodb_undo%';
下图可以帮助大家更好的理解undo log的存储机制:
在undo log中,存储的是数据更新前的记录,以及行ID、事务ID、回滚指针记录。
每次事务ID递增时,输入语句中的回滚指针第一次为NULL。第二次更新后,undo log回滚指针指向前一个undo log。
以此类推,形成一条undo log的回滚链,方便查询记录的历史版本。
04 回滚日志的工作原理
回滚日志属于逻辑日志,记录变更过程。例如:
- 执行删除,回滚日志记录添加;
- 执行更新,回滚日志记录反向更新。
在更新数据之前,MySQL会提前生成回滚日志,并不会在事务提交后立即删除回滚日志。这是因为您稍后可能需要反转。当执行ROLLBACK操作时,它会从缓存中删除。读取数据。
日志回滚 清除日志是通过后台清理线程进行回收的。
下面的图有助于理解。运行更新的详细过程请参见SQL中选择:
- 事务A:执行更新操作时,首先将更新捕获的数据备份到相应的回滚缓冲区中,然后回滚日志文件将使用回滚缓冲区显示在磁盘上。
- 事务 B: 执行查询操作并直接从撤消缓冲区高速缓存中读取。当事务回滚时,首先直接从回滚缓冲区高速缓存中读取,而不是从磁盘读取。
05 总结
通过本文,我们了解并掌握了日志检索的记录机制和工作原理。
撤消日志是MySQL中极其重要的逻辑日志。 撤消日志以逻辑方式记录数据库事务修改操作,记录事务执行过程中的数据库事务修改操作。值的备份,以便在事务回滚或并发控制需要时可以恢复数据。 正确使用undo log可以显着提高数据库性能和并发控制。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。