一个只执行查询、没有锁住业务行的事务,为什么也可能让数据库空间上涨、查询变慢?因为它保留的旧快照,可能迫使 InnoDB 长时间保存大量历史版本。
这一集从报表任务忘记提交的场景出发,讲清一致性读、读视图、撤销日志和后台清理如何协作,以及长事务为什么会把版本链越拖越长。
重点内容:
- 普通查询如何在不阻塞更新的情况下读取旧版本
- 读视图如何判断某个版本是否可见
- 撤销日志为什么既用于回滚,也用于一致性读
- 长事务如何阻止历史版本被清理
- 版本链变长为什么会增加读取成本
- 为什么只读事务也应及时结束
- 如何发现并治理长期未提交事务
英文词对照:
- MVCC:多版本并发控制
- Consistent Read:一致性读
- Read View:读视图
- Undo Log:撤销日志
- Version Chain:版本链
- Purge:历史版本清理
- History List Length:历史列表长度
- Long-running Transaction:长事务

