Redrock Postgres 搜索 英文
版本: 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

27.4. 进度报告 #

27.4.1. ANALYZE 进度报告
27.4.2. CLUSTER 进度报告
27.4.3. COPY 进度报告
27.4.4. CREATE INDEX 进度报告
27.4.5. VACUUM 进度报告
27.4.6. 基础备份进度报告

PostgreSQL 在命令执行期间具有报告某些命令的进度的功能。目前,唯一支持进度报告的命令是 ANALYZECLUSTERCREATE INDEXVACUUMCOPYBASE_BACKUP(即 pg_basebackup 发出以进行基础备份的复制命令)。此功能今后有可能会得到扩展。

27.4.1. ANALYZE 进度报告 #

每当 ANALYZE 正在运行时,pg_stat_progress_analyze 视图将包含当前正在运行该命令的每个后端的行。下表描述将报告的信息,并提供有关如何解读这些信息的信息。

表 27.38. pg_stat_progress_analyze 视图

列类型

说明

pid integer

后端的进程 ID。

datid oid

此后端连接的数据库的 OID。

datname name

此后端连接的数据库的名称。

relid oid

正在分析的表的 OID。

phase text

当前处理阶段。请参阅 表 27.39

sample_blks_total bigint

将采样的堆块总数。

sample_blks_scanned bigint

已扫描的堆块数。

ext_stats_total bigint

扩展统计信息的数量。

ext_stats_computed bigint

已计算的扩展统计信息的数量。此计数器仅在阶段为 computing extended statistics 时才会增加。

child_tables_total bigint

子表数。

child_tables_done bigint

已扫描的子表数。此计数器仅在阶段为 acquiring inherited sample rows 时才会增加。

current_child_table_relid oid

正在扫描的子表的 OID。此字段仅在阶段为 acquiring inherited sample rows 时才有效。


表 27.39. ANALYZE 阶段

阶段 说明
initializing 该命令正在准备开始扫描堆。此阶段预计将非常短暂。
acquiring sample rows 该命令当前正在扫描 relid 给出的表,以获取样本行。
acquiring inherited sample rows 该命令当前正在扫描子表,以获取样本行。列 child_tables_totalchild_tables_donecurrent_child_table_relid 包含此阶段的进度信息。
computing statistics 该命令正在计算从表扫描期间获取的样本行的统计信息。
计算扩展统计信息 该命令正在从表扫描期间获取的示例行中计算扩展统计信息。
完成分析 该命令正在更新 pg_class。当此阶段完成后,ANALYZE 将结束。

注解

请注意,当对分区表运行 ANALYZE 时,其所有分区都将递归分析。在这种情况下,首先报告父表的 ANALYZE 进度,收集其继承统计信息,然后再报告每个分区的进度。

27.4.2. CLUSTER 进度报告 #

每当 CLUSTER VACUUM FULL 正在运行时,pg_stat_progress_cluster 视图将包含一行,用于当前运行任一命令的每个后端。下表描述了将报告的信息,并提供了有关如何解释该信息的说明。

表 27.40. pg_stat_progress_cluster 视图

列类型

说明

pid integer

后端的进程 ID。

datid oid

此后端连接的数据库的 OID。

datname name

此后端连接的数据库的名称。

relid oid

正在群集的表的 OID。

command text

正在运行的命令。要么是 CLUSTER,要么是 VACUUM FULL

phase text

当前处理阶段。请参见 表 27.41

cluster_index_relid oid

如果正在使用索引扫描表,这是正在使用的索引的 OID;否则为零。

heap_tuples_scanned bigint

扫描的堆元组数。此计数器仅在阶段为 seq scanning heapindex scanning heapwriting new heap 时才会增加。

heap_tuples_written bigint

写入的堆元组数。此计数器仅在阶段为 seq scanning heapindex scanning heapwriting new heap 时才会增加。

heap_blks_total bigint

表中的堆块总数。此数字报告自 seq scanning heap 开始。

heap_blks_scanned bigint

扫描的堆块数。此计数器仅在阶段为 seq scanning heap 时才会增加。

index_rebuild_count bigint

已重建索引数。此计数器仅在阶段为 rebuilding index 时才会递增。


表 27.41。CLUSTER 和 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 该命令正在执行最终清理。在该阶段完成时,CLUSTERVACUUM FULL 将结束。

27.4.3. COPY 进度报告 #

只要 COPY 正在运行,pg_stat_progress_copy 视图将包含一行用于当前正在运行 COPY 命令的每个后端。下表描述了将报告的信息,并提供了如何解释该信息的说明。

表 27.42。 pg_stat_progress_copy 视图

列类型

说明

pid integer

后端的进程 ID。

datid oid

此后端连接的数据库的 OID。

datname name

此后端连接的数据库的名称。

relid oid

执行 COPY 命令的表的 OID。如果从 SELECT 查询进行复制,则设置为 0

command text

正在运行的命令:COPY FROMCOPY TO

type text

从其读取或写入数据的 I/O 类型:FILEPROGRAMPIPE(对于 COPY FROM STDINCOPY TO STDOUT)或 CALLBACK(例如在逻辑复制中的初始表同步期间使用)。

bytes_processed bigint

COPY 命令已处理的字节数。

bytes_total bigint

COPY FROM 命令的源文件大小(以字节为单位)。如果不可用,则将其设置为 0

tuples_processed bigint

COPY 命令已处理的元组数。

tuples_excluded bigint

由于被 COPY 命令的 WHERE 子句排除而未处理的元组数。

tuples_skipped bigint

由于包含格式错误的数据而被跳过的元组数。此计数器仅在向 ON_ERROR 选项指定 stop 以外的值时才会递增。


27.4.4. CREATE INDEX 进度报告 #

只要 CREATE INDEXREINDEX 正在运行,pg_stat_progress_create_index 视图都将针对当前正在创建索引的每个后端包含一行。下表描述了将报告的信息,并提供有关如何解释这些信息的信息。

表 27.43. pg_stat_progress_create_index 视图

列类型

说明

pid integer

正在创建索引的后端的进程 ID。

datid oid

此后端连接的数据库的 OID。

datname name

此后端连接的数据库的名称。

relid oid

正在创建索引的表的 OID。

index_relid oid

正在创建或重新索引的索引的 OID。在非并行 CREATE INDEX 期间,此值为 0。

command text

特定命令类型:CREATE INDEXCREATE INDEX CONCURRENTLYREINDEXREINDEX CONCURRENTLY

phase text

索引创建的当前处理阶段。请参见 表 27.44

lockers_total bigint

在适用时,要等待的总锁定数。

lockers_done bigint

已等待的锁定数。

current_locker_pid bigint

当前正在等待的锁定者的进程 ID。

blocks_total bigint

在当前阶段要处理的总块数。

blocks_done bigint

在当前阶段已处理的块数。

tuples_total bigint

在当前阶段要处理的总元组数。

tuples_done bigint

在当前阶段已处理的元组数。

partitions_total bigint

要在其上创建或附加索引的分区总数,包括直接和间接分区。在 REINDEX 期间或索引未分区时为 0

partitions_done bigint

已在其上创建或附加索引的分区数,包括直接和间接分区。在 REINDEX 期间或索引未分区时为 0


表 27.44. CREATE INDEX 阶段

阶段 说明
initializing 创建索引重建索引 正在准备创建索引。此阶段预计非常短。
在构建之前等待写入 并发创建索引并发重建索引 正在等待可能会看到表的事务完成写锁操作。不在并发模式下时会跳过此阶段。列 lockers_totallockers_donecurrent_locker_pid 包含此阶段的进度信息。
正在构建索引 索引正由特定于访问方式的代码构建。在此阶段,支持进度报告的访问方式会在自己的进度数据中填充数据,且子阶段在此列中表示。通常,blocks_totalblocks_done 将包含进度数据,以及可能是 tuples_totaltuples_done
在验证之前等待写入 并发创建索引并发重建索引 正在等待可能会写表的事务完成写锁操作。不在并发模式下时会跳过此阶段。列 lockers_totallockers_donecurrent_locker_pid 包含此阶段的进度信息。
索引验证:扫描索引 并发创建索引 正在扫描索引以查找需要验证的元组。不在并发模式下时会跳过此阶段。列 blocks_total(设置为索引的总大小)和 blocks_done 包含此阶段的进度信息。
索引验证:对元组进行排序 并发创建索引 正在对索引扫描阶段的输出进行排序。
索引验证:扫描表 并发创建索引 正在扫描表以验证在先前两个阶段收集的索引元组。不在并发模式下时会跳过此阶段。列 blocks_total(设置为表的总大小)和 blocks_done 包含此阶段的进度信息。
等待旧快照 并发创建索引并发重建索引 正在等待可能会看到表的事务释放它们的快照。不在并发模式下时会跳过此阶段。列 lockers_totallockers_donecurrent_locker_pid 包含此阶段的进度信息。
等待读者标记死索引 REINDEX CONCURRENTLY 正在等待表上读锁定的事务完成,然后标记旧索引为死索引。在非并发模式下,此阶段会被跳过。列 lockers_totallockers_donecurrent_locker_pid 包含此阶段的进度信息。
等待读者删除索引 REINDEX CONCURRENTLY 正在等待表上读锁定的事务完成,然后删除旧索引。在非并发模式下,此阶段会被跳过。列 lockers_totallockers_donecurrent_locker_pid 包含此阶段的进度信息。

27.4.5. VACUUM 进度报告 #

只要 VACUUM 正在运行,pg_stat_progress_vacuum 视图就会针对每个后端(包括自动 VACUUM 工作进程)包含一行,这些后端当前正在执行 VACUUM。下表描述了将要报告的信息,并提供有关如何对其进行解释的信息。对于 VACUUM FULL 命令,可以通过 pg_stat_progress_cluster 报告其进度,因为 VACUUM FULLCLUSTER 都重写表,而常规 VACUUM 仅就地修改表。请参阅 章节 27.4.2

表 27.45. pg_stat_progress_vacuum 视图

列类型

说明

pid integer

后端的进程 ID。

datid oid

此后端连接的数据库的 OID。

datname name

此后端连接的数据库的名称。

relid oid

正在执行 VACUUM 的表的 OID。

phase text

当前处理的 VACUUM 阶段。请参阅 表 27.46

heap_blks_total bigint

表中堆块的总数。此数字报告自扫描开始时的数字;稍后添加的块不会(也不需要)被此 VACUUM 访问。

heap_blks_scanned bigint

扫描的堆块数。因为使用 可见性映射 来优化扫描,所以某些块不会被检查直接跳过;跳过的块包含在此总数中,因此当 VACUUM 完成后,此数字最终将等于 heap_blks_total。只有当阶段是 扫描堆 时,此计数器才会增加。

heap_blks_vacuumed bigint

已清除的堆块数量。除非表没有索引,否则只有在阶段是 清除堆 时此计数器才会增加。不包含死元组的块会被跳过,因此此计数器有时可能会以较大的增量递增。

index_vacuum_count bigint

已完成的索引清除周期数量。

max_dead_tuple_bytes bigint

在需要执行索引清除周期之前可以存储的死元组数据量,基于 maintenance_work_mem

dead_tuple_bytes bigint

上个索引 vacuum 周期以来收集的死元组数。

num_dead_item_ids bigint

上个索引 vacuum 周期以来收集的死项目标识符数。

indexes_total bigint

将要执行 vacuum 或清理操作的索引总数。这个数在 vacuuming indexescleaning up indexes 阶段开始时报告。

indexes_processed bigint

已处理的索引数。此计数器仅在阶段为 vacuuming indexescleaning up indexes 时才会增加。


表 27.46。VACUUM 阶段

阶段 说明
initializing VACUUM 准备开始扫描堆。此阶段预计非常短暂。
scanning heap VACUUM 当前正在扫描堆。如果需要,它会裁剪并整理每个页面,并可能执行冻结活动。使用 heap_blks_scanned 列可以监控扫描的进度。
vacuuming indexes VACUUM 当前正在对索引执行 vacuum 操作。如果一张表具有任何索引,此操作会在堆完全扫描完毕后执行至少一次。如果 maintenance_work_mem(或者在 autovacuum 的情况下,如果已设置,则为 autovacuum_work_mem)不足以存储发现的死元组数量,则每执行一次 vacuum 可能会执行多次此操作。
vacuuming heap VACUUM 当前正在对堆执行 vacuum 操作。对堆执行 vacuum 操作与扫描堆不同,且在每次对索引执行 vacuum 操作之后都会执行。如果 heap_blks_scanned 小于 heap_blks_total,则系统会在此阶段完成后返回到扫描堆;否则,系统会在此阶段完成后开始清理索引。
cleaning up indexes VACUUM 当前正在清理索引。此操作在堆完全扫描完毕且对索引和堆的所有 vacuum 操作都已完成后执行。
truncating heap VACUUM 当前正在对堆进行截断操作,以便在关系末尾为操作系统返回空页面。此操作在清理索引之后执行。
performing final cleanup VACUUM 正在执行最后的清理。在此阶段,VACUUM 会清理空闲空间映射,更新 pg_class 的统计数据,并将统计数据报告到累积统计数据系统。此阶段完成后,VACUUM 将结束。

27.4.6. 基准备份进度报告 #

pg_basebackup 等应用程序执行基准备份时,pg_stat_progress_basebackup 视图会为当前运行 BASE_BACKUP 复制命令并串流备份的每个 WAL 发送器进程包含一行数据。下表介绍将报告的信息,并提供如何解释该信息的详细信息。

表 27.47. pg_stat_progress_basebackup 视图

列类型

说明

pid integer

WAL 发送器进程的进程 ID。

phase text

当前处理阶段。请参见 表 27.48

backup_total bigint

将要串流的数据总量。根据 串流数据库文件 阶段的初始值估算并报告此值。请注意,这只是一个估算值,因为数据库可能会在 串流数据库文件 阶段发生变化,并且之后可能会将 WAL 日志包括在备份中。一旦串流的数据量超出估算的总量,此值将始终与 backup_streamed 保持相同。如果在 pg_basebackup 中禁用了估算(即指定了 --no-estimate-size 选项),则此值为 NULL

backup_streamed bigint

串流的数据量。当阶段为 串流数据库文件传输 WAL 文件 时,该计数器才会增加。

tablespaces_total bigint

将要串流的表空间总数。

tablespaces_streamed bigint

已串流的表空间数。当阶段为 串流数据库文件 时,该计数器才会增加。


表 27.48. 基准备份阶段

阶段 说明
initializing WAL 发送器进程准备开始备份。预计此阶段非常短暂。
等待检查点完成 WAL 发送器进程当前正在执行 pg_backup_start 以准备执行基准备份,并等待开始备份检查点完成。
估算备份大小 WAL 发送器进程当前正在估算作为基准备份要串流的数据库文件总量。
串流数据库文件 WAL 发送器进程当前正在作为基准备份串流数据库文件。
等待 WAL 归档完成 WAL 发送器进程当前正在执行 pg_backup_stop 以完成备份,并正在等待为基本备份所需的全部 WAL 文件成功归档。如果在 pg_basebackup 中指定 --wal-method=none--wal-method=stream,备份将在此阶段完成后结束。
传输 WAL 文件 WAL 发送器进程目前正在传输备份期间生成的所有 WAL 日志。如果在 pg_basebackup 中指定 --wal-method=fetch,此阶段会在 正在等待 WAL 归档结束 阶段之后发生。备份将在此阶段完成后结束。