,行锁数量过多的话会升级为表锁),是我早些年对DB2最大的槽点(如果抛开那个巨丑巨丑的数据库图形工具的话)....每当发生数据写入(delete或者update),InnoDB会做一个操作,就是把老的行做一个删除标记,然后带着当前的事务id插入新行(由于是索引组织表,保证必须在同一个数据块中),这个操作本身,一是会把修改本身写入...在具体的流程上,平安的自动化vacuum调度流程,可以说是非常完备:
其主要分为,策略制定,并行调度,调度报表三部分....而其最正当的理由,就是:一个已经足够大的表,如果其实际大小是"本来应该的大小"的两倍,那vacuum的代价也是两倍了....作者最初的想法,是从B树出发,分区并行扫描,后来在讨论中,变成从表上的多个索引出发并行,单个索引上还是单进程(如果表上只有一个索引,那还是单进程vacuum)
最终的实现是:
首先并行扫描一遍表,取出来需要处理的行号