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。此欄位僅在階段為 |
表格 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
時,也會以遞迴方式分析其所有分割區。在這種情況下,ANALYZE
進度首先針對父表格報告,藉此收集其繼承統計資料,然後針對每個分割區報告。
無論何時執行 CLUSTER
或 VACUUM FULL
,pg_stat_progress_cluster
檢視表都會包含目前正在執行任一命令的每個後端的一列。下表描述了將報告的資訊,並提供了有關如何解讀它的資訊。
表格 27.40. pg_stat_progress_cluster
檢視表
欄位類型 描述 |
---|
後端的程序 ID。 |
此後端所連接的資料庫的 OID。 |
此後端所連接的資料庫的名稱。 |
正在叢集化的表格的 OID。 |
正在執行的命令。可以是 |
目前的處理階段。請參閱表格 27.41。 |
如果使用索引掃描表格,這是正在使用的索引的 OID;否則,它為零。 |
已掃描的堆積元組數。此計數器僅在階段為 |
已寫入的堆積元組數。此計數器僅在階段為 |
表格中的堆積區塊總數。此數字是在 |
掃描的堆積區塊數量。只有在階段為 |
重建的索引數量。只有在階段為 |
表 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 |
此命令正在執行最終清理。當此階段完成時,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 欄位包含此階段的進度資訊。 |
等待舊的快照 |
CREATE INDEX CONCURRENTLY 或 REINDEX CONCURRENTLY 正在等待可能看到該資料表的交易釋放它們的快照。如果不是在並行模式下,則會跳過此階段。lockers_total 、lockers_done 和 current_locker_pid 欄位包含此階段的進度資訊。 |
在標記為失效之前,等待讀取者 |
REINDEX CONCURRENTLY 正在等待具有資料表讀取鎖定的交易完成,然後再將舊索引標記為失效。如果不是在並行模式下,則會跳過此階段。lockers_total 、lockers_done 和 current_locker_pid 欄位包含此階段的進度資訊。 |
在捨棄之前,等待讀取者 |
REINDEX CONCURRENTLY 正在等待具有資料表讀取鎖定的交易完成,然後再捨棄舊索引。如果不是在並行模式下,則會跳過此階段。lockers_total 、lockers_done 和 current_locker_pid 欄位包含此階段的進度資訊。 |
每當 VACUUM
正在執行時,pg_stat_progress_vacuum
檢視表將包含每個目前正在執行 vacuum 的後端 (包括 autovacuum 工作程序) 的一列。下表描述了將報告的資訊,並提供了關於如何解讀它的資訊。VACUUM FULL
命令的進度透過 pg_stat_progress_cluster
報告,因為 VACUUM FULL
和 CLUSTER
都會重寫資料表,而常規 VACUUM
僅在原地修改它。請參閱 Section 27.4.2。
表 27.45. pg_stat_progress_vacuum
檢視表
欄位類型 描述 |
---|
後端的程序 ID。 |
此後端所連接的資料庫的 OID。 |
此後端所連接的資料庫的名稱。 |
正在執行 vacuum 的資料表的 OID。 |
vacuum 的目前處理階段。請參閱 表 27.46。 |
資料表中的堆積區塊總數。此數字是在掃描開始時報告的;稍後新增的區塊將不會 (並且不需要) 由此 |
已掃描的堆積區塊數量。因為 可見性地圖 用於最佳化掃描,所以某些區塊將被跳過而不檢查;跳過的區塊包含在此總數中,因此當 vacuum 完成時,此數字最終將等於 |
已執行 vacuum 的堆積區塊數量。除非資料表沒有索引,否則此計數器僅在階段為 |
已完成的索引 vacuum 週期數。 |
基於 maintenance_work_mem,我們可以在需要執行索引 vacuum 週期之前儲存的已失效元組資料量。 |
自上次索引 vacuum 週期以來收集的已失效元組資料量。 |
自上次索引 vacuum 週期以來收集的已失效項目識別碼數量。 |
將被 vacuum 或清理的索引總數。此數字在 |
已處理的索引數。此計數器僅在階段為 |
表 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 將結束。 |
每當像 pg_basebackup 這樣的應用程式正在進行基本備份時,pg_stat_progress_basebackup
檢視表將包含每個目前正在執行 BASE_BACKUP
複製命令並串流備份的 WAL 發送器程序的一列。下表描述了將報告的資訊,並提供了關於如何解讀它的資訊。
表 27.47. pg_stat_progress_basebackup
檢視表
欄位類型 描述 |
---|
WAL 發送器程序的程序 ID。 |
目前的處理階段。請參閱 表 27.48。 |
將被串流的資料總量。這是估計值,並於 |
已串流的資料量。此計數器僅在階段為 |
將被串流的資料表空間總數。 |
已串流的資料表空間數量。此計數器僅在階段為 |
表 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 階段之後發生。備份將在此階段完成時結束。 |
如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清之處,請使用此表單回報文件問題。