加载中...

Undo Log(回滚日志)是 InnoDB 记录数据被修改前旧值的逻辑日志。它有两大用途:一是事务回滚时按 undo 记录逆向恢复数据,保证原子性;二是为 MVCC 提供旧版本数据,使读操作无需加锁。
每行记录包含隐藏字段:事务 ID(trx_id)与回滚指针(roll_pointer)。更新一行时,旧版本被写入 undo log,回滚指针指向它,多次修改形成一条版本链。快照读根据事务的 Read View 沿版本链找到对自己可见的版本。insert 的 undo 记录在事务提交后即可删除;update/delete 的 undo 需等到没有任何 Read View 再需要它时,才由后台 purge 线程清理。
长时间不提交的事务会阻止 purge,导致 undo 表空间(history list)持续膨胀、查询变慢,这是 MySQL 上最常见的隐性故障之一。MySQL 8.0 支持独立可回收的 undo 表空间,缓解了空间无法收缩的问题。

登录 后参与讨论
暂无讨论,来发表第一条评论吧