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 階段之後。備份將在該階段完成後結束。 |
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用 此表單 報告文件問題。