MySQL InnoDB purge源码解析
purge
数据库系统中,事务删除记录时,不会立即从B树中删除,而是打上删除标记。这样做有以下两个原因:
实现事务的隔离性。事务在删除记录并提交后,其他事务可能需要访问这条记录,只有当记录对所有活动事务都不可见时,才可以从B树中删除。打上删除标记后,其他事务通过key或索引扫描可以定位到这条记录,判断删除对当前事务不可见、或通过记录上rollptr找到undo日志拼装出最后可见的记录。
提升删除效率。从B树中删除记录可能需要调整B树结构,而标记删除只需要给记录打上删除标记即可,效率更高,后续purge时再从B树中删除记录并释放空间。
对于B树中被删除的记录,如果已经没有事务访问了,则可以被完全清理掉,即需要purge。
MySQL中purge由专门的线程进行,操作单位是undo日志,即每一条undo日志都需要被purge。
purge条件
purge流程
源码分析
未完待续