当前位置:   article > 正文

postgres:清理过程(1)_pg_stat_all_table

pg_stat_all_table

并发清理

1 移除死元组

  • 移除每一页中的死元组,并对每一页内的活元组仅从碎片整理
  • 移除指向死原则的索引原则

2 冻结旧的事务标识

  • 如有必要,冻结旧元组的事务标识
  • 更新与冻结事务标识相关的系统视图(pg_database和pg_class)
  • 如果可能,移除不必要的CLOG文件

3 其他

  • 更新已处理表的空闲空间映射(FSM)和可见性映射(VM)
  • 更新一些统计信息(pg-stat_all_tables等)

并发清理伪代码

  1. (1) FOR each table
  2. (2) Acquire ShareUpdateExclusiveLock lock for the target table
  3. /* 第一部分 */
  4. (3) Scan all pages to get all dead tuples, and freeze old tuples if necessary
  5. (4) Remove the index tuples that point to the respective dead tuples if exists
  6. /* 第二部分 */
  7. (5) FOR each page of the table
  8. (6) Remove the dead tuples, and Reallocate the live tuples in the page
  9. (7) Update FSM and VM
  10. END FOR
  11. /* 第三部分 */
  12. (8) Clean up indexes
  13. (9) Truncate the last page if possible
  14. (10 Update both the statistics and system catalogs of the target table
  15. Release ShareUpdateExclusiveLock lock
  16. END FOR
  17. /* Post-processing */
  18. (11) Update statistics and system catalogs
  19. (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,见下图:

第三部分

更新与发清理过程相关的统计信息和系统信息

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/256318
推荐阅读
相关标签
  

闽ICP备14008679号