Post

MySQL InnoDB purge源码解析

purge

数据库系统中,事务删除记录时,不会立即从B树中删除,而是打上删除标记。这样做有以下两个原因:

  1. 实现事务的隔离性。事务在删除记录并提交后,其他事务可能需要访问这条记录,只有当记录对所有活动事务都不可见时,才可以从B树中删除。打上删除标记后,其他事务通过key或索引扫描可以定位到这条记录,判断删除对当前事务不可见、或通过记录上rollptr找到undo日志拼装出最后可见的记录。

  2. 提升删除效率。从B树中删除记录可能需要调整B树结构,而标记删除只需要给记录打上删除标记即可,效率更高,后续purge时再从B树中删除记录并释放空间。

对于B树中被删除的记录,如果已经没有事务访问了,则可以被完全清理掉,即需要purge。

MySQL中purge由专门的线程进行,操作单位是undo日志,即每一条undo日志都需要被purge。

purge条件

purge流程

源码分析

未完待续