选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6
历史版本PostgreSQL 9.6 已于 2021 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

28.4. 进度报告 #

PostgreSQL能够在某些命令执行期间报告其进度。目前,支持进度报告的命令只有VACUUM。未来可能会扩展此功能。

28.4.1. VACUUM 进度报告 #

只要VACUUM正在运行,pg_stat_progress_vacuum视图就会为每个当前正在清理的后端(包括自动清理工作进程)包含一行。下表描述了将报告的信息,并说明如何解释这些信息。目前不支持报告VACUUM FULL的进度,运行VACUUM FULL的后端不会列在此视图中。

表 28.20. pg_stat_progress_vacuum 视图

类型 描述
pid integer 后端的进程ID。
datid oid 后端连接到的数据库的OID。
datname name 后端连接到的数据库的名称。
relid oid 正在清理的表的OID。
phase text 清理的当前处理阶段。参见 表 28.21
heap_blks_total bigint 该表中堆块的总数。这个数字以扫描开始时的数量为准,之后增加的块将不会(并且不需要)被这个VACUUM访问。
heap_blks_scanned bigint 被扫描的堆块数量。由于可见性映射被用来优化扫描,一些块将被跳过而不做检查, 被跳过的块会被包括在这个总数中,因此当清理完成时这个数字最终将会等于heap_blks_total。 仅当处于scanning heap阶段时这个计数器才会前进。
heap_blks_vacuumed bigint 被清理的堆块数量。除非表没有索引,这个计数器仅在处于vacuuming heap阶段时才会前进。 不包含死亡元组的块会被跳过,因此这个计数器可能有时会向前跳跃一个比较大的增量。
index_vacuum_count bigint 已完成的索引清理周期数。
max_dead_tuples bigint 在需要执行索引清理周期之前可存储的死亡元组数量,取决于maintenance_work_mem
num_dead_tuples bigint 自上一个索引清理周期以来收集到的死亡元组数量。

表 28.21. VACUUM 阶段

阶段 描述
initializing VACUUM正在准备开始扫描堆。这个阶段应该很简短。
scanning heap VACUUM正在扫描堆。如果需要,它将会对每个页面进行剪枝以及碎片整理,并且可能会执行冻结动作。heap_blks_scanned列可以用来监控扫描的进度。
vacuuming indexes VACUUM当前正在清理索引。如果表有索引,每次清理都会在堆扫描完成后至少执行一次此阶段。如果maintenance_work_mem(或者,对于自动清理,已设置的autovacuum_work_mem)不足以存储找到的死亡元组数量,则每次清理可能多次执行此阶段。
vacuuming heap VACUUM当前正在清理堆。清理堆与扫描堆不是同一个概念,清理堆发生在每次索引清理之后。如果heap_blks_scanned小于heap_blks_total,系统将在这个阶段完成之后回去扫描堆;否则,系统将在这个阶段完成后开始索引收尾清理。
cleaning up indexes VACUUM当前正在进行索引收尾清理。这个阶段发生在堆被完全扫描并且对堆和索引的所有清理都已经完成以后。
truncating heap VACUUM正在截断堆,以便把关系尾部的空页面返还给操作系统。这个阶段发生在索引收尾清理完成之后。
performing final cleanup VACUUM正在执行最终清理。在此阶段,VACUUM将清理空闲空间映射, 更新pg_class中的统计信息,并向统计收集器报告统计信息。当此阶段完成时, VACUUM将结束。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。