PostgreSQL 能够报告某些命令在执行期间的进度。目前,唯一支持进度报告的命令是 ANALYZE
、CLUSTER
、CREATE INDEX
、VACUUM
、COPY
以及 BASE_BACKUP(即 pg_basebackup 用于创建基础备份的复制命令)。未来可能会扩展此功能。
每当 ANALYZE
运行时,pg_stat_progress_analyze
视图将包含一个行,对应一个当前正在运行该命令的后端。下表描述了将报告的信息以及如何解释这些信息。
表 27.38. pg_stat_progress_analyze
视图
列 类型 描述 |
---|
后端的进程 ID。 |
此后端连接的数据库的 OID。 |
此后端连接的数据库的名称。 |
正在分析的表的 OID。 |
当前处理阶段。请参见 表 27.39。 |
将要采样的堆块总数。 |
已扫描的堆块数。 |
扩展统计信息的数量。 |
已计算的扩展统计信息的数量。此计数器仅在阶段为 |
子表的数量。 |
已扫描的子表数量。此计数器仅在阶段为 |
当前正在扫描的子表的 OID。此字段仅在阶段为 |
由于基于成本的延迟而花费的总睡眠时间(参见 第 19.10.2 节),以毫秒为单位(如果启用了 track_cost_delay_timing,否则为零)。 |
表 27.39. ANALYZE 阶段
阶段 | 描述 |
---|---|
initializing |
命令正在准备开始扫描堆。此阶段预计非常短暂。 |
acquiring sample rows |
命令当前正在扫描由 relid 指定的表以获取样本行。 |
acquiring inherited sample rows |
命令当前正在扫描子表以获取样本行。列 child_tables_total 、child_tables_done 和 current_child_table_relid 包含此阶段的进度信息。 |
computing statistics |
命令正在根据在表扫描期间获得的样本行计算统计信息。 |
computing extended statistics |
命令正在根据在表扫描期间获得的样本行计算扩展统计信息。 |
finalizing analyze |
命令正在更新 pg_class 。当此阶段完成时,ANALYZE 将结束。 |
请注意,当 ANALYZE
在没有 ONLY
关键字的情况下应用于分区表时,其所有分区也将被递归分析。在这种情况下,ANALYZE
进度将首先报告给父表,收集其继承统计信息,然后报告给每个分区。
每当 CLUSTER
或 VACUUM FULL
运行时,pg_stat_progress_cluster
视图将包含一个行,对应一个当前正在运行其中一个命令的后端。下表描述了将报告的信息以及如何解释这些信息。
表 27.40. pg_stat_progress_cluster
视图
列 类型 描述 |
---|
后端的进程 ID。 |
此后端连接的数据库的 OID。 |
此后端连接的数据库的名称。 |
正在聚类的表的 OID。 |
正在运行的命令。可能是 |
当前处理阶段。请参见 表 27.41。 |
如果表正在使用索引进行扫描,则这是正在使用的索引的 OID;否则为零。 |
已扫描的堆元组数。此计数器仅在阶段为 |
已写入的堆元组数。此计数器仅在阶段为 |
表中堆块的总数。此数字报告自 |
已扫描的堆块数。此计数器仅在阶段为 |
已重建的索引数。此计数器仅在阶段为 |
表 27.41. CLUSTER and VACUUM FULL 阶段
阶段 | 描述 |
---|---|
initializing |
命令正在准备开始扫描堆。此阶段预计非常短暂。 |
seq scanning heap |
命令当前正在使用顺序扫描来扫描表。 |
index scanning heap |
CLUSTER 当前正在使用索引扫描来扫描表。 |
sorting tuples |
CLUSTER 当前正在对元组进行排序。 |
writing new heap |
CLUSTER 当前正在写入新的堆。 |
swapping relation files |
命令当前正在将新构建的文件交换到位。 |
rebuilding index |
命令当前正在重建索引。 |
performing final cleanup |
命令正在执行最终清理。当此阶段完成后,CLUSTER 或 VACUUM FULL 将结束。 |
每当 COPY
运行时,pg_stat_progress_copy
视图将包含一个行,对应一个当前正在运行 COPY
命令的后端。下表描述了将报告的信息以及如何解释这些信息。
表 27.42. pg_stat_progress_copy
视图
列 类型 描述 |
---|
后端的进程 ID。 |
此后端连接的数据库的 OID。 |
此后端连接的数据库的名称。 |
|
正在运行的命令: |
数据读取或写入的 I/O 类型: |
|
对于 |
|
由于 |
由于包含格式错误的数据而跳过的元组数。此计数器仅在 |
每当 CREATE INDEX
或 REINDEX
运行时,pg_stat_progress_create_index
视图将包含一个行,对应一个当前正在创建索引的后端。下表描述了将报告的信息以及如何解释这些信息。
表 27.43. pg_stat_progress_create_index
视图
列 类型 描述 |
---|
创建索引的后端的进程 ID。 |
此后端连接的数据库的 OID。 |
此后端连接的数据库的名称。 |
正在创建索引的表的 OID。 |
正在创建或重新索引的索引的 OID。在非并发 |
特定命令类型: |
索引创建的当前处理阶段。请参见 表 27.44。 |
适用时,需要等待的锁定者总数。 |
已等待的锁定者数量。 |
当前正在等待的锁定者的进程 ID。 |
当前阶段需要处理的总块数。 |
当前阶段已处理的块数。 |
当前阶段需要处理的总元组数。 |
当前阶段已处理的元组数。 |
需要创建或附加索引的总分区数,包括直接和间接分区。 |
已创建或附加索引的分区数,包括直接和间接分区。 |
表 27.44. CREATE INDEX 阶段
阶段 | 描述 |
---|---|
initializing |
CREATE INDEX 或 REINDEX 正在准备创建索引。此阶段预计非常短暂。 |
waiting for writers before build |
CREATE INDEX CONCURRENTLY 或 REINDEX CONCURRENTLY 正在等待可能可以看到该表的具有写锁的事务完成。在此非并发模式下,此阶段将被跳过。列 lockers_total 、lockers_done 和 current_locker_pid 包含此阶段的进度信息。 |
building index |
索引正在通过特定于访问方法的代码进行构建。在此阶段,支持进度报告的访问方法会填充其自己的进度数据,并且此列会指示子阶段。通常,blocks_total 和 blocks_done 将包含进度数据,并且可能还包括 tuples_total 和 tuples_done 。 |
waiting for writers before validation |
CREATE INDEX CONCURRENTLY 或 REINDEX CONCURRENTLY 正在等待可能写入该表的具有写锁的事务完成。在此非并发模式下,此阶段将被跳过。列 lockers_total 、lockers_done 和 current_locker_pid 包含此阶段的进度信息。 |
index validation: scanning index |
CREATE INDEX CONCURRENTLY 正在扫描索引,查找需要验证的元组。在此非并发模式下,此阶段将被跳过。列 blocks_total (设置为索引的总大小)和 blocks_done 包含此阶段的进度信息。 |
index validation: sorting tuples |
CREATE INDEX CONCURRENTLY 正在对索引扫描阶段的输出进行排序。 |
index validation: scanning table |
CREATE INDEX CONCURRENTLY 正在扫描表以验证前两个阶段收集的索引元组。在此非并发模式下,此阶段将被跳过。列 blocks_total (设置为表总大小)和 blocks_done 包含此阶段的进度信息。 |
waiting for old snapshots |
CREATE INDEX CONCURRENTLY 或 REINDEX CONCURRENTLY 正在等待可能看到该表的事务释放其快照。在此非并发模式下,此阶段将被跳过。列 lockers_total 、lockers_done 和 current_locker_pid 包含此阶段的进度信息。 |
waiting for readers before marking dead |
REINDEX CONCURRENTLY 正在等待具有表读锁的事务完成,然后才将旧索引标记为无效。在此非并发模式下,此阶段将被跳过。列 lockers_total 、lockers_done 和 current_locker_pid 包含此阶段的进度信息。 |
waiting for readers before dropping |
REINDEX CONCURRENTLY 正在等待具有表读锁的事务完成,然后才删除旧索引。在此非并发模式下,此阶段将被跳过。列 lockers_total 、lockers_done 和 current_locker_pid 包含此阶段的进度信息。 |
每当 VACUUM
运行时,pg_stat_progress_vacuum
视图将包含一个行,对应一个当前正在 vacuuming 的后端(包括 autovacuum 工作进程)。下表描述了将报告的信息以及如何解释这些信息。 VACUUM FULL
命令的进度通过 pg_stat_progress_cluster
报告,因为 VACUUM FULL
和 CLUSTER
都会重写表,而常规的 VACUUM
只会就地修改它。请参见 第 27.4.2 节。
表 27.45. pg_stat_progress_vacuum
视图
列 类型 描述 |
---|
后端的进程 ID。 |
此后端连接的数据库的 OID。 |
此后端连接的数据库的名称。 |
正在 vacuuming 的表的 OID。 |
vacuum 的当前处理阶段。请参见 表 27.46。 |
表中堆块的总数。此数字报告自扫描开始时的值;稍后添加的块不会(也不需要)被此 |
已扫描的堆块数。由于使用 可见性图 来优化扫描,因此一些块会被跳过而无需检查;跳过的块包含在此总数中,因此当 vacuum 完成时,此数字最终将等于 |
已 vacuumed 的堆块数。除非表没有任何索引,否则此计数器仅在阶段为 |
已完成的索引 vacuum 循环次数。 |
在我们能够存储的死元组数据量,在需要执行索引 vacuum 循环之前,基于 maintenance_work_mem。 |
自上一个索引 vacuum 循环以来收集的死元组数据量。 |
自上一个索引 vacuum 循环以来收集的死项标识符数量。 |
将要 vacuumed 或清理的总索引数。此数字在 |
已处理的索引数。此计数器仅在阶段为 |
由于基于成本的延迟而花费的总睡眠时间(参见 第 19.10.2 节),以毫秒为单位(如果启用了 track_cost_delay_timing,否则为零)。这包括任何关联的并行工作进程睡眠的时间。但是,并行工作进程报告其睡眠时间不频繁于每秒一次,因此报告的值可能略有滞后。 |
表 27.46. VACUUM 阶段
阶段 | 描述 |
---|---|
initializing |
VACUUM 正在准备开始扫描堆。此阶段预计非常短暂。 |
scanning heap |
VACUUM 当前正在扫描堆。它将根据需要进行修剪和碎片整理,并可能执行冻结活动。heap_blks_scanned 列可用于监视扫描进度。 |
vacuuming indexes |
VACUUM 当前正在 vacuuming 索引。如果表有任何索引,这至少会发生一次 vacuum,在堆完全扫描之后。如果 maintenance_work_mem(或 autovacuum 的情况下,如果设置了 autovacuum_work_mem)不足以存储找到的死元组数量,则每次 vacuum 可能会发生多次。 |
vacuuming heap |
VACUUM 当前正在 vacuuming 堆。堆的 vacuuming 与扫描堆不同,发生在每次索引 vacuum 之后。如果 heap_blks_scanned 小于 heap_blks_total ,则在此阶段完成后,系统将返回到扫描堆;否则,它将在该阶段完成后开始清理索引。 |
cleaning up indexes |
VACUUM 当前正在清理索引。这发生在堆完全扫描以及所有索引和堆的 vacuuming 完成之后。 |
truncating heap |
VACUUM 当前正在截断堆,以便将关系末尾的空页返回给操作系统。这发生在清理索引之后。 |
performing final cleanup |
VACUUM 正在执行最终清理。在此阶段,VACUUM 将 vacuum 空闲空间图,更新 pg_class 中的统计信息,并将统计信息报告给累积统计系统。当此阶段完成时,VACUUM 将结束。 |
每当像 pg_basebackup 这样的应用程序正在进行基础备份时,pg_stat_progress_basebackup
视图将包含一个行,对应一个当前正在运行 BASE_BACKUP
复制命令并流式传输备份的 WAL 发送进程。下表描述了将报告的信息以及如何解释这些信息。
表 27.47. pg_stat_progress_basebackup
视图
列 类型 描述 |
---|
WAL 发送进程的进程 ID。 |
当前处理阶段。请参见 表 27.48。 |
将要流式传输的数据总量。这是在 |
已流式传输的数据量。此计数器仅在阶段为 |
将要流式传输的表空间总数。 |
已流式传输的表空间数。此计数器仅在阶段为 |
表 27.48. Base Backup 阶段
阶段 | 描述 |
---|---|
initializing |
WAL 发送进程正在准备开始备份。此阶段预计非常短暂。 |
waiting for checkpoint to finish |
WAL 发送进程当前正在执行 pg_backup_start 以准备进行基础备份,并等待开始备份的检查点完成。 |
estimating backup size |
WAL 发送进程当前正在估计将作为基础备份流式传输的数据库文件总数。 |
streaming database files |
WAL 发送进程当前正在将数据库文件作为基础备份进行流式传输。 |
waiting for wal archiving to finish |
WAL 发送进程当前正在执行 pg_backup_stop 来完成备份,并等待基础备份所需的所有 WAL 文件成功归档。如果在 pg_basebackup 中指定了 --wal-method=none 或 --wal-method=stream ,则备份将在此阶段完成后结束。 |
transferring wal files |
WAL 发送进程当前正在传输备份期间生成的任何 WAL 日志。如果在 pg_basebackup 中指定了 --wal-method=fetch ,则此阶段发生在 waiting for wal archiving to finish 阶段之后。备份将在该阶段完成后结束。 |
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步说明的内容,请使用 此表单 报告文档问题。