支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6

27.4. 進度報告 #

PostgreSQL 具有在命令執行期間報告某些命令進度的能力。目前,唯一支援進度報告的命令是 ANALYZECLUSTERCREATE INDEXVACUUMCOPYBASE_BACKUP(即 pg_basebackup 發出以進行基本備份的複製命令)。未來可能會擴充此功能。

27.4.1. ANALYZE 進度報告 #

無論何時執行 ANALYZEpg_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 命令正在從表格掃描期間取得的範例列計算統計資料。
computing extended statistics 命令正在從表格掃描期間取得的範例列計算延伸統計資料。
finalizing analyze 命令正在更新 pg_class。完成此階段後,ANALYZE 將結束。

注意

請注意,當在分割表格上執行 ANALYZE 時,也會以遞迴方式分析其所有分割區。在這種情況下,ANALYZE 進度首先針對父表格報告,藉此收集其繼承統計資料,然後針對每個分割區報告。

27.4.2. CLUSTER 進度報告 #

無論何時執行 CLUSTERVACUUM FULLpg_stat_progress_cluster 檢視表都會包含目前正在執行任一命令的每個後端的一列。下表描述了將報告的資訊,並提供了有關如何解讀它的資訊。

表格 27.40. pg_stat_progress_cluster 檢視表

欄位類型

描述

pid integer

後端的程序 ID。

datid oid

此後端所連接的資料庫的 OID。

datname name

此後端所連接的資料庫的名稱。

relid oid

正在叢集化的表格的 OID。

command text

正在執行的命令。可以是 CLUSTERVACUUM 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 進度報告 #

無論何時執行 COPYpg_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 INDEXREINDEXpg_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 CREATE INDEXREINDEX 正在準備建立索引。 預計此階段非常短暫。
waiting for writers before build CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY 正在等待具有可能看到資料表的寫入鎖定的交易完成。 如果未處於並行模式,則會略過此階段。 欄位 lockers_totallockers_donecurrent_locker_pid 包含此階段的進度資訊。
building index 索引正由存取方法特定的程式碼建立。 在此階段中,支援進度報告的存取方法會填入其自己的進度資料,並且此欄位中會指出子階段。 一般而言,blocks_totalblocks_done 將包含進度資料,以及可能包含 tuples_totaltuples_done
waiting for writers before validation CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY 正在等待具有可能寫入資料表的寫入鎖定的交易完成。 如果未處於並行模式,則會略過此階段。 欄位 lockers_totallockers_donecurrent_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 欄位包含此階段的進度資訊。
等待舊的快照 CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY 正在等待可能看到該資料表的交易釋放它們的快照。如果不是在並行模式下,則會跳過此階段。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 的後端 (包括 autovacuum 工作程序) 的一列。下表描述了將報告的資訊,並提供了關於如何解讀它的資訊。VACUUM FULL 命令的進度透過 pg_stat_progress_cluster 報告,因為 VACUUM FULLCLUSTER 都會重寫資料表,而常規 VACUUM 僅在原地修改它。請參閱 Section 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。此計數器僅在階段為 scanning heap 時才會增加。

heap_blks_vacuumed bigint

已執行 vacuum 的堆積區塊數量。除非資料表沒有索引,否則此計數器僅在階段為 vacuuming heap 時才會增加。不包含已失效元組的區塊將被跳過,因此計數器有時可能會以很大的增量向前跳躍。

index_vacuum_count bigint

已完成的索引 vacuum 週期數。

max_dead_tuple_bytes bigint

基於 maintenance_work_mem,我們可以在需要執行索引 vacuum 週期之前儲存的已失效元組資料量。

dead_tuple_bytes bigint

自上次索引 vacuum 週期以來收集的已失效元組資料量。

num_dead_item_ids bigint

自上次索引 vacuum 週期以來收集的已失效項目識別碼數量。

indexes_total bigint

將被 vacuum 或清理的索引總數。此數字在 vacuuming indexes 階段或 cleaning up indexes 階段開始時報告。

indexes_processed bigint

已處理的索引數。此計數器僅在階段為 vacuuming indexescleaning up indexes 時才會增加。


表 27.46. VACUUM 階段

階段 描述
initializing VACUUM 正在準備開始掃描堆積。此階段預計非常短暫。
掃描堆積 VACUUM 目前正在掃描堆積。如果需要,它將修剪和整理每個頁面,並且可能執行凍結活動。heap_blks_scanned 欄位可用於監控掃描的進度。
vacuum 索引 VACUUM 目前正在 vacuum 索引。如果資料表有任何索引,這至少會在每次 vacuum 時發生一次,在堆積完全掃描之後。如果 maintenance_work_mem (或者,在 autovacuum 的情況下,如果設定了 autovacuum_work_mem) 不足以儲存找到的已失效元組數量,則每次 vacuum 都可能發生多次。
vacuum 堆積 VACUUM 目前正在 vacuum 堆積。Vacuum 堆積與掃描堆積不同,並且在每次 vacuum 索引之後發生。如果 heap_blks_scanned 小於 heap_blks_total,則系統將在此階段完成後返回掃描堆積;否則,它將在此階段完成後開始清理索引。
清理索引 VACUUM 目前正在清理索引。這會在堆積已完全掃描並且索引和堆積的所有 vacuum 都已完成後發生。
截斷堆積 VACUUM 目前正在截斷堆積,以便將關係末端的空頁面返回給作業系統。這會在清理索引之後發生。
performing final cleanup VACUUM 正在執行最終清理。在此階段中,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

將被串流的資料總量。這是估計值,並於streaming database files階段開始時報告。請注意,這僅為近似值,因為資料庫可能會在streaming database files階段變更,且WAL日誌稍後可能會包含在備份中。一旦串流的資料量超過估計的總大小,此值始終與backup_streamed相同。如果在pg_basebackup中停用估計(即,指定了--no-estimate-size選項),則此值為NULL

backup_streamed bigint

已串流的資料量。此計數器僅在階段為streaming database filestransferring wal files時才會增加。

tablespaces_total bigint

將被串流的資料表空間總數。

tablespaces_streamed bigint

已串流的資料表空間數量。此計數器僅在階段為streaming database files時才會增加。


表 27.48. 基本備份階段

階段 描述
initializing WAL sender 程序正在準備開始備份。預計此階段會非常短暫。
waiting for checkpoint to finish(等待檢查點完成) WAL sender 程序目前正在執行pg_backup_start以準備進行基本備份,並等待備份開始檢查點完成。
estimating backup size(估計備份大小) WAL sender 程序目前正在估計將作為基本備份串流的資料庫檔案總量。
streaming database files(串流資料庫檔案) WAL sender 程序目前正在將資料庫檔案作為基本備份串流傳輸。
waiting for wal archiving to finish(等待WAL歸檔完成) WAL sender 程序目前正在執行pg_backup_stop以完成備份,並等待基本備份所需的所有WAL檔案成功歸檔。如果在pg_basebackup中指定--wal-method=none--wal-method=stream,則備份將在此階段完成時結束。
transferring wal files(傳輸WAL檔案) WAL sender 程序目前正在傳輸備份期間產生的所有WAL日誌。如果在pg_basebackup中指定--wal-method=fetch,則此階段會在waiting for wal archiving to finish階段之後發生。備份將在此階段完成時結束。

提交更正

如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清之處,請使用此表單回報文件問題。