赞
踩
1 移除死元组
2 冻结旧的事务标识
3 其他
并发清理伪代码:
- (1) FOR each table
- (2) Acquire ShareUpdateExclusiveLock lock for the target table
-
- /* 第一部分 */
- (3) Scan all pages to get all dead tuples, and freeze old tuples if necessary
- (4) Remove the index tuples that point to the respective dead tuples if exists
-
- /* 第二部分 */
- (5) FOR each page of the table
- (6) Remove the dead tuples, and Reallocate the live tuples in the page
- (7) Update FSM and VM
- END FOR
-
- /* 第三部分 */
- (8) Clean up indexes
- (9) Truncate the last page if possible
- (10 Update both the statistics and system catalogs of the target table
- Release ShareUpdateExclusiveLock lock
- END FOR
-
- /* Post-processing */
- (11) Update statistics and system catalogs
- (12) Remove both unnecessary files and pages of the clog if possible
这一部分执行冻结处理,并删除指向死元组的索引元组,详见:https://blog.csdn.net/shipeng1022/article/details/108658017。注:在10.0或者更低版本中始终会执行清除阶段,在11或者更高版本,如果目标索引是B树,是否执行清除阶段由配置参数vacuum_cleanup_index_scale_factor决定。
这一部分会移除死元组,并逐页更新FSM和VM,见下图:
第三部分
更新与发清理过程相关的统计信息和系统信息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。