历史版本。 PostgreSQL 10 已结束支持。 2022-11-10. 请参阅 当前版本手册.
28.4. 进度报告 #
PostgreSQL 能够在某些命令执行期间报告其进度。目前,支持进度报告的命令只有 VACUUM。未来可能会扩展此功能。
28.4.1. VACUUM 进度报告 #
只要 VACUUM 正在运行,pg_stat_progress_vacuum 视图就会为每个当前正在清理的后端(包括自动清理工作进程)包含一行。下表描述了将报告的信息,并说明如何解释这些信息。目前不支持报告 VACUUM FULL 的进度,运行 VACUUM FULL 的后端不会列在此视图中。
表 28.21. pg_stat_progress_vacuum 视图
| 列 | 类型 | 描述 |
|---|---|---|
pid | integer | 后端的进程 ID。 |
datid | oid | 后端连接到的数据库的 OID。 |
datname | name | 后端连接到的数据库的名称。 |
relid | oid | 正在清理的表的 OID。 |
phase | text | 清理的当前处理阶段。参见表 28.22。 |
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.22. 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 将结束。
|