MySQL的undo log是一种用于实现事务的原子性和持久性的日志机制。在事务处理过程中,undo log记录了数据变更前的状态,这样如果事务需要回滚(rollback),系统可以利用这些信息将数据恢复到原始状态。同时,在多版本并发控制(MVCC)环境下,undo log也支持读取一致性视图。

在MySQL中,当一个事务开始修改数据时(例如更新一个记录),存储引擎会将修改前的记录写入到undo log中。每个修改动作都会产生相应的undo日志条目,并且每个条目都与特定版本号关联。

MVCC是数据库管理系统并发控制的一种方法,在读写操作频繁发生时能够提供高效率和低锁争用。它允许多个事务同时对同一数据进行读取而不相互干扰,并且能够看到在特定时间点或者时间范围内数据库快照级别上稳定、一致地视图。

当使用MVCC时,不同版本号代表了数据库变更历史上不同点上提交完成后数据库状态快照;每次查询操作都可以通过当前系统版本号来确定应该看到哪些更新——即只有那些提交时间戳小于等于查询开始时刻系统版本号、并且未被后续更新删除或覆盖过得记录才对该查询可见。

具体来说,在执行SELECT操作时:

  1. 系统首先确定当前SELECT语句执行所处时间点对应得全局唯一递增版版好。
  2. 然后根据这个全局唯一递增版好去检索需要访问得表。
  3. 如果遇见行级锁或者其他阻塞因素,则通过检查行关联得隐藏列——包含创建此行纪录得交易ID以及可能删除此纪录交易ID——与当前SELECT语句执行所处时间点进行比较。
  4. 如果创建此行纪录交易ID小于等于全局唯一递增版好,并且没有被标记为删除或者标记为删除但相关交易ID大于全局唯1递增编号,则认为该纪录可见;否则跳过继续检索下一个符合条件项。

如果要回滚某项操作:

  1. MySQL会查找相关联未完成transaction产生之undolog信息。
  2. 根据undolog里面保存之前值恢复覆盖现有值达成撤销效果。
    3.撤销完毕后释放所有相关资源包括锁以及内存空间等待GC处理清理工作

Undo logs也支持垃圾收集机制:随着新transaction生成新undologs,旧已经没有必要保留供任何活跃transaction参考之早期历史undologs就可以清理释放资源空间给新活动使用提高整体效率减少无谓开销保证稳定运转

总结而言, MySQL undo logs 在 MVCC 支持下确保了即使在高并发环墀下各自隔离运作各自业务流程同时还能确保整体数据完整性安全无误地管理着所有可能出现场景需求 包括但不限於正常业务流程处理异常情况紧急撤销需求以及长期健康稳健运营基础设施建设需求

云服务器/高防CDN推荐

蓝易云国内/海外高防云服务器推荐


海外免备案云服务器链接:www.tsyvps.com

蓝易云安全企业级高防CDN:www.tsycdn.com

持有增值电信营业许可证:B1-20222080【资质齐全】

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。


百度搜索:蓝易云

最后修改:2023 年 12 月 18 日
如果觉得我的文章对你有用,请随意赞赏