pg_stat_activity
pg_stat_replication
pg_stat_replication_slots
pg_stat_wal_receiver
pg_stat_recovery_prefetch
pg_stat_subscription
pg_stat_subscription_stats
pg_stat_ssl
pg_stat_gssapi
pg_stat_archiver
pg_stat_io
pg_stat_bgwriter
pg_stat_checkpointer
pg_stat_wal
pg_stat_database
pg_stat_database_conflicts
pg_stat_all_tables
pg_stat_all_indexes
pg_statio_all_tables
pg_statio_all_indexes
pg_statio_all_sequences
pg_stat_user_functions
pg_stat_slru
PostgreSQL 的累積統計系統支援收集和報告關於伺服器活動的資訊。目前,存取磁碟區塊和個別列中表格和索引的次數都會被計算。每個表格中的列總數,以及每個表格的 vacuum 和 analyze 動作的資訊也會被計算。如果啟用,對使用者定義函數的呼叫以及每個函數中花費的總時間也會被計算。
PostgreSQL 也支援報告關於系統中正在發生的事情的動態資訊,例如其他伺服器程序目前正在執行的確切命令,以及系統中存在的其他連線。此功能獨立於累積統計系統。
由於收集統計資料會增加查詢執行的額外負荷,因此可以將系統設定為收集或不收集資訊。這由通常在 postgresql.conf
中設定的設定參數控制。(有關設定設定參數的詳細資訊,請參閱第 19 章。)
參數 track_activities 啟用監控任何伺服器程序正在執行的目前命令。
參數 track_counts 控制是否收集關於表格和索引存取的累積統計資料。
參數 track_functions 啟用追蹤使用者定義函數的使用情況。
參數 track_io_timing 啟用監控區塊讀取、寫入、擴展和 fsync 時間。
參數 track_wal_io_timing 啟用監控 WAL 寫入和 fsync 時間。
通常這些參數在 postgresql.conf
中設定,以便它們適用於所有伺服器程序,但可以使用 SET 命令在個別工作階段中開啟或關閉它們。(為了防止普通使用者向管理員隱藏他們的活動,只有超級使用者才允許使用 SET
變更這些參數。)
累積統計資料會收集在共享記憶體中。每個 PostgreSQL 程序會在本地收集統計資料,然後以適當的間隔更新共享資料。當伺服器(包括實體副本)乾淨地關閉時,統計資料的永久副本會儲存在 pg_stat
子目錄中,以便在伺服器重新啟動後保留統計資料。相反地,當從不乾淨的關閉狀態啟動時(例如,在立即關閉、伺服器崩潰、從基本備份啟動以及時間點恢復之後),所有統計資料計數器都會重置。
有幾個預先定義的檢視表,列於表 27.1中,可用於顯示系統的目前狀態。還有另外幾個檢視表,列於表 27.2中,可用於顯示累積的統計資料。或者,可以使用底層的累積統計資料函式建立自訂檢視表,如第 27.2.26 節所述。
當使用累積統計資料檢視表和函式來監控收集的資料時,重要的是要了解資訊不會立即更新。每個單獨的伺服器程序會在閒置之前,將累積的統計資料刷新到共享記憶體中,但頻率不會高於每 PGSTAT_MIN_INTERVAL
毫秒(預設為 1 秒,除非在建置伺服器時更改);因此,仍在進行中的查詢或交易不會影響顯示的總數,且顯示的資訊會落後於實際活動。然而,由 track_activities
收集的目前查詢資訊始終是最新的。
另一個重點是,當要求伺服器程序顯示任何累積的統計資料時,預設設定下,存取的值會被緩存,直到目前交易結束。因此,只要您繼續目前的交易,統計資料就會顯示靜態資訊。同樣地,在交易中首次請求任何此類資訊時,會收集有關所有連線的目前查詢資訊,並且在整個交易過程中都會顯示相同的資訊。這是一個特性,而不是錯誤,因為它允許您對統計資料執行多個查詢,並關聯結果,而無需擔心數字會隨之改變。當以互動方式或使用昂貴的查詢分析統計資料時,存取個別統計資料之間的時間差可能會導致緩存的統計資料出現顯著的偏差。為了盡量減少偏差,可以將 stats_fetch_consistency
設定為 snapshot
,但代價是增加快取不需要的統計資料的記憶體使用量。相反地,如果已知統計資料只會被存取一次,則沒有必要快取存取的統計資料,可以透過將 stats_fetch_consistency
設定為 none
來避免。您可以呼叫 pg_stat_clear_snapshot()
來丟棄目前交易的統計資料快照或快取值(如果有的話)。下一次使用統計資料時,將會(在快照模式下)建立新的快照,或(在快取模式下)存取的統計資料將被快取。
交易也可以在檢視表 pg_stat_xact_all_tables
、pg_stat_xact_sys_tables
、pg_stat_xact_user_tables
和 pg_stat_xact_user_functions
中看到自己的統計資料(尚未刷新到共享記憶體統計資料)。這些數字的行為與上述不同;相反地,它們會在整個交易過程中不斷更新。
表 27.1中顯示的動態統計資料檢視表中的某些資訊受到安全性限制。普通使用者只能看到有關他們自己連線的所有資訊(屬於他們是成員的角色所擁有的連線)。在有關其他連線的列中,許多欄位將為空值。但是請注意,所有使用者都可以看到連線的存在及其一般屬性,例如其連線使用者和資料庫。超級使用者和具有內建模組角色 pg_read_all_stats
權限的角色(另請參閱第 21.5 節)可以查看所有連線的所有資訊。
表 27.1. 動態統計資料檢視表
檢視表名稱 | 描述 |
---|---|
pg_stat_activity |
每個伺服器程序一行,顯示與該程序的目前活動相關的資訊,例如狀態和目前查詢。有關詳細資訊,請參閱pg_stat_activity 。 |
pg_stat_replication |
每個 WAL 發送程序一行,顯示有關複製到該發送程序所連線的待命伺服器的統計資料。有關詳細資訊,請參閱pg_stat_replication 。 |
pg_stat_wal_receiver |
只有一行,顯示有關來自該接收器所連線的伺服器的 WAL 接收器的統計資料。有關詳細資訊,請參閱pg_stat_wal_receiver 。 |
pg_stat_recovery_prefetch |
只有一行,顯示有關在恢復期間預先提取的區塊的統計資料。有關詳細資訊,請參閱pg_stat_recovery_prefetch 。 |
pg_stat_subscription |
每個訂閱至少一行,顯示有關訂閱工作程序的資訊。有關詳細資訊,請參閱pg_stat_subscription 。 |
pg_stat_ssl |
每個連線(常規和複製)一行,顯示有關在此連線上使用的 SSL 的資訊。有關詳細資訊,請參閱pg_stat_ssl 。 |
pg_stat_gssapi |
每個連線(常規和複製)一行,顯示有關在此連線上使用的 GSSAPI 驗證和加密的資訊。有關詳細資訊,請參閱pg_stat_gssapi 。 |
pg_stat_progress_analyze |
正在執行 ANALYZE 的每個後端(包括 autovacuum 工作程序)一行,顯示目前進度。請參閱第 27.4.1 節。 |
pg_stat_progress_create_index |
每個執行 CREATE INDEX 或 REINDEX 的後端程序各有一列,顯示目前的進度。請參閱第 27.4.4 節。 |
pg_stat_progress_vacuum |
每個執行 VACUUM 的後端程序 (包括 autovacuum 工作程序) 各有一列,顯示目前的進度。請參閱第 27.4.5 節。 |
pg_stat_progress_cluster |
每個執行 CLUSTER 或 VACUUM FULL 的後端程序各有一列,顯示目前的進度。請參閱第 27.4.2 節。 |
pg_stat_progress_basebackup |
每個串流基本備份的 WAL sender 程序各有一列,顯示目前的進度。請參閱第 27.4.6 節。 |
pg_stat_progress_copy |
每個執行 COPY 的後端程序各有一列,顯示目前的進度。請參閱第 27.4.3 節。 |
表 27.2. 收集的統計資訊視窗
檢視表名稱 | 描述 |
---|---|
pg_stat_archiver |
僅有一列,顯示關於 WAL archiver 程序活動的統計資訊。有關詳細資訊,請參閱pg_stat_archiver 。 |
pg_stat_bgwriter |
僅有一列,顯示關於 background writer 程序活動的統計資訊。有關詳細資訊,請參閱pg_stat_bgwriter 。 |
pg_stat_checkpointer |
僅有一列,顯示關於 checkpointer 程序活動的統計資訊。有關詳細資訊,請參閱pg_stat_checkpointer 。 |
pg_stat_database |
每個資料庫各有一列,顯示資料庫範圍的統計資訊。有關詳細資訊,請參閱pg_stat_database 。 |
pg_stat_database_conflicts |
每個資料庫各有一列,顯示資料庫範圍的統計資訊,關於由於與待命伺服器上的復原衝突而導致的查詢取消。有關詳細資訊,請參閱pg_stat_database_conflicts 。 |
pg_stat_io |
每個包含叢集範圍 I/O 統計資訊的後端類型、上下文和目標物件的組合各有一列。有關詳細資訊,請參閱pg_stat_io 。 |
pg_stat_replication_slots |
每個複寫槽各有一列,顯示關於複寫槽使用情況的統計資訊。有關詳細資訊,請參閱pg_stat_replication_slots 。 |
pg_stat_slru |
每個 SLRU 各有一列,顯示操作的統計資訊。有關詳細資訊,請參閱pg_stat_slru 。 |
pg_stat_subscription_stats |
每個訂閱各有一列,顯示關於錯誤的統計資訊。有關詳細資訊,請參閱pg_stat_subscription_stats 。 |
pg_stat_wal |
僅有一列,顯示關於 WAL 活動的統計資訊。有關詳細資訊,請參閱pg_stat_wal 。 |
pg_stat_all_tables |
目前資料庫中的每個資料表各有一列,顯示關於存取該特定資料表的統計資訊。有關詳細資訊,請參閱pg_stat_all_tables 。 |
pg_stat_sys_tables |
與 pg_stat_all_tables 相同,但僅顯示系統資料表。 |
pg_stat_user_tables |
與 pg_stat_all_tables 相同,但僅顯示使用者資料表。 |
pg_stat_xact_all_tables |
與 pg_stat_all_tables 相似,但計算目前交易中到目前為止採取的動作 (這些動作尚未包含在 pg_stat_all_tables 及相關視窗中)。此視窗中不存在存活和死亡列的數量以及 vacuum 和 analyze 動作的欄位。 |
pg_stat_xact_sys_tables |
與 pg_stat_xact_all_tables 相同,但僅顯示系統資料表。 |
pg_stat_xact_user_tables |
與 pg_stat_xact_all_tables 相同,但僅顯示使用者資料表。 |
pg_stat_all_indexes |
目前資料庫中的每個索引各有一列,顯示關於存取該特定索引的統計資訊。有關詳細資訊,請參閱pg_stat_all_indexes 。 |
pg_stat_sys_indexes |
與 pg_stat_all_indexes 相同,但僅顯示系統資料表上的索引。 |
pg_stat_user_indexes |
與 pg_stat_all_indexes 相同,但僅顯示使用者資料表上的索引。 |
pg_stat_user_functions |
每個追蹤的函數各有一列,顯示關於該函數執行的統計資訊。有關詳細資訊,請參閱pg_stat_user_functions 。 |
pg_stat_xact_user_functions |
類似於 pg_stat_user_functions ,但僅計算目前交易期間的呼叫次數(這些呼叫尚未包含在 pg_stat_user_functions 中)。 |
pg_statio_all_tables |
目前資料庫中每個資料表都有一列,顯示關於該特定資料表 I/O 的統計資訊。詳情請參閱pg_statio_all_tables 。 |
pg_statio_sys_tables |
與 pg_statio_all_tables 相同,但僅顯示系統資料表。 |
pg_statio_user_tables |
與 pg_statio_all_tables 相同,但僅顯示使用者資料表。 |
pg_statio_all_indexes |
目前資料庫中每個索引都有一列,顯示關於該特定索引 I/O 的統計資訊。詳情請參閱pg_statio_all_indexes 。 |
pg_statio_sys_indexes |
與 pg_statio_all_indexes 相同,但僅顯示系統資料表上的索引。 |
pg_statio_user_indexes |
與 pg_statio_all_indexes 相同,但僅顯示使用者資料表上的索引。 |
pg_statio_all_sequences |
目前資料庫中每個序列都有一列,顯示關於該特定序列 I/O 的統計資訊。詳情請參閱pg_statio_all_sequences 。 |
pg_statio_sys_sequences |
與 pg_statio_all_sequences 相同,但僅顯示系統序列。(目前未定義任何系統序列,因此此檢視表始終為空。) |
pg_statio_user_sequences |
與 pg_statio_all_sequences 相同,但僅顯示使用者序列。 |
每個索引的統計資訊對於確定哪些索引正在使用以及它們的有效性特別有用。
pg_stat_io
和 pg_statio_
這組檢視表對於確定緩衝區快取的有效性非常有用。它們可用於計算快取命中率。請注意,雖然 PostgreSQL 的 I/O 統計資訊捕捉了大多數為了執行 I/O 而調用核心的情況,但它們無法區分必須從磁碟提取的資料和已經存在於核心頁面快取中的資料。建議使用者將 PostgreSQL 統計資訊檢視表與作業系統工具結合使用,以更完整地了解資料庫的 I/O 效能。
pg_stat_activity
#pg_stat_activity
檢視表每個伺服器程序都有一列,顯示與該程序目前活動相關的資訊。
表格 27.3. pg_stat_activity
檢視表
欄位 類型 描述 |
---|
此後端連接的資料庫的 OID |
此後端連接的資料庫的名稱 |
此後端的程序 ID |
如果此程序是並行查詢工作程序,則為並行群組領導者的程序 ID;如果此程序是並行套用工作程序,則為領導套用工作程序的程序 ID。 |
登入此後端的使用者的 OID |
登入此後端的使用者的名稱 |
連接到此後端的應用程式的名稱 |
連接到此後端的用戶端的 IP 位址。如果此欄位為空,則表示用戶端透過伺服器機器上的 Unix socket 連接,或者這是一個內部程序,例如自動清理。 |
已連接用戶端的主機名稱,由 |
用戶端用於與此後端通訊的 TCP 埠號,如果使用 Unix socket,則為 |
此程序啟動的時間。對於用戶端後端,這是用戶端連接到伺服器的時間。 |
此程序目前交易開始的時間,如果沒有活動的交易,則為空。如果目前的查詢是其交易的第一個查詢,則此欄位等於 |
目前活動查詢開始的時間,如果 |
|
後端正在等待的事件類型(如果有的話);否則為 NULL。請參閱表格 27.4。 |
|
此後端目前的整體狀態。可能的值為
|
此後端的頂層交易識別碼(如果有的話);請參閱第 66.1 節。 |
目前後端的 |
此後端最近查詢的識別碼。如果 |
此後端最近查詢的文字。如果 |
目前後端的類型。可能的類型為 |
wait_event
和 state
欄位是獨立的。如果後端處於 active
狀態,則它可能正在或可能沒有 waiting
某些事件。如果狀態為 active
且 wait_event
不為 null,則表示正在執行查詢,但在系統中的某個地方被阻止。
表 27.4. 等待事件類型
等待事件類型 | 描述 |
---|---|
活動 |
伺服器程序處於閒置狀態。此事件類型表示程序在其主處理迴圈中等待活動。wait_event 將識別特定的等待點;請參閱表 27.5。 |
BufferPin |
伺服器程序正在等待對資料緩衝區的獨佔存取權。如果另一個程序持有開啟的游標,該游標上次從有問題的緩衝區讀取資料,則緩衝區固定等待可能會延長。請參閱表 27.6。 |
Client |
伺服器程序正在等待連接到使用者應用程式的 Socket 上的活動。因此,伺服器期望發生一些與其內部程序無關的事情。wait_event 將識別特定的等待點;請參閱表 27.7。 |
Extension |
伺服器程序正在等待擴充模組定義的某些條件。請參閱表 27.8。 |
InjectionPoint |
伺服器程序正在等待注入點達到測試中定義的結果。有關更多詳細資訊,請參閱第 36.10.13 節。此類型沒有預定義的等待點。 |
IO |
伺服器程序正在等待 I/O 作業完成。wait_event 將識別特定的等待點;請參閱表 27.9。 |
IPC |
伺服器程序正在等待與另一個伺服器程序的一些互動。wait_event 將識別特定的等待點;請參閱表 27.10。 |
Lock |
伺服器程序正在等待一個重量級鎖定。重量級鎖定,也稱為鎖定管理器鎖定或簡稱為鎖定,主要保護 SQL 可見的物件,例如資料表。但是,它們也用於確保某些內部作業(例如關係擴充)的互斥。wait_event 將識別等待的鎖定類型;請參閱表 27.11。 |
LWLock |
伺服器程序正在等待一個輕量級鎖定。大多數此類鎖定保護共享記憶體中的特定資料結構。wait_event 將包含一個名稱,用於識別輕量級鎖定的目的。(某些鎖定具有特定的名稱;其他鎖定是一組鎖定的一部分,每個鎖定具有相似的目的。)請參閱表 27.12。 |
Timeout |
伺服器程序正在等待逾時到期。wait_event 將識別特定的等待點;請參閱表 27.13。 |
表 27.5. Activity
類型的等待事件
Activity 等待事件 |
描述 |
---|---|
ArchiverMain |
在封存程序的主迴圈中等待。 |
AutovacuumMain |
在自動清理啟動程序的主迴圈中等待。 |
BgwriterHibernate |
在背景寫入程序中等待,休眠。 |
BgwriterMain |
在背景寫入程序的主迴圈中等待。 |
CheckpointerMain |
在檢查點程序的主迴圈中等待。 |
LogicalApplyMain |
在邏輯複寫應用程序的主迴圈中等待。 |
LogicalLauncherMain |
在邏輯複寫啟動程序的主迴圈中等待。 |
LogicalParallelApplyMain |
在邏輯複寫平行應用程序的主迴圈中等待。 |
RecoveryWalStream |
在啟動程序的主迴圈中等待 WAL 到達,在串流復原期間。 |
ReplicationSlotsyncMain |
在 Slot 同步工作進程的主迴圈中等待。 |
ReplicationSlotsyncShutdown |
等待 Slot 同步工作進程關閉。 |
SysloggerMain |
在系統記錄程序的主迴圈中等待。 |
WalReceiverMain |
在 WAL 接收程序的主迴圈中等待。 |
WalSenderMain |
在 WAL 傳送程序的主迴圈中等待。 |
WalSummarizerWal |
等待 WAL 摘要器產生更多 WAL。 |
WalWriterMain |
等待 WAL 寫入器程序的主迴圈。 |
表 27.6. 類型為 Bufferpin
的等待事件
BufferPin 等待事件 |
描述 |
---|---|
BufferPin |
等待取得 buffer 的獨佔 pin。 |
表 27.7. 類型為 Client
的等待事件
Client 等待事件 |
描述 |
---|---|
ClientRead |
等待從客戶端讀取資料。 |
ClientWrite |
等待寫入資料到客戶端。 |
GssOpenServer |
在建立 GSSAPI 會話時,等待從客戶端讀取資料。 |
LibpqwalreceiverConnect |
在 WAL 接收器中等待建立與遠端伺服器的連線。 |
LibpqwalreceiverReceive |
在 WAL 接收器中等待從遠端伺服器接收資料。 |
SslOpenServer |
嘗試連線時,等待 SSL。 |
WaitForStandbyConfirmation |
等待實體備用伺服器接收並刷新 WAL。 |
WalSenderWaitForWal |
等待 WAL 在 WAL 發送器程序中被刷新。 |
WalSenderWriteData |
在 WAL 發送器程序中處理來自 WAL 接收器的回覆時,等待任何活動。 |
表 27.8. 類型為 Extension
的等待事件
Extension 等待事件 |
描述 |
---|---|
Extension |
在擴充功能中等待。 |
表 27.9. 類型為 Io
的等待事件
IO 等待事件 |
描述 |
---|---|
BasebackupRead |
等待基礎備份從檔案讀取資料。 |
BasebackupSync |
等待基礎備份寫入的資料到達持久儲存空間。 |
BasebackupWrite |
等待基礎備份寫入資料到檔案。 |
BuffileRead |
等待從緩衝檔案讀取資料。 |
BuffileTruncate |
等待截斷緩衝檔案。 |
BuffileWrite |
等待寫入資料到緩衝檔案。 |
ControlFileRead |
等待從 pg_control 檔案讀取資料。 |
ControlFileSync |
等待 pg_control 檔案到達持久儲存空間。 |
ControlFileSyncUpdate |
等待 pg_control 檔案的更新到達持久儲存空間。 |
ControlFileWrite |
等待寫入資料到 pg_control 檔案。 |
ControlFileWriteUpdate |
等待寫入資料以更新 pg_control 檔案。 |
CopyFileRead |
等待在檔案複製操作期間讀取資料。 |
CopyFileWrite |
等待在檔案複製操作期間寫入資料。 |
DataFileExtend |
等待擴展關係資料檔案。 |
DataFileFlush |
等待關係資料檔案到達持久儲存空間。 |
DataFileImmediateSync |
等待關係資料檔案立即同步到持久儲存空間。 |
DataFilePrefetch |
等待從關係資料檔案進行非同步預取。 |
DataFileRead |
等待從關係資料檔案讀取資料。 |
DataFileSync |
等待對關係資料檔案的變更到達持久儲存空間。 |
DataFileTruncate |
等待截斷關係資料檔案。 |
DataFileWrite |
等待寫入資料到關係資料檔案。 |
DsmAllocate |
等待分配動態共享記憶體區段。 |
DsmFillZeroWrite |
等待用零填充動態共享記憶體後端檔案。 |
LockFileAddtodatadirRead |
等待將一行新增到資料目錄鎖定檔案時讀取資料。 |
LockFileAddtodatadirSync |
等待將一行新增到資料目錄鎖定檔案時,資料到達持久儲存空間。 |
LockFileAddtodatadirWrite |
等待將一行新增到資料目錄鎖定檔案時寫入資料。 |
LockFileCreateRead |
等待建立資料目錄鎖定檔案時讀取資料。 |
LockFileCreateSync |
等待建立資料目錄鎖定檔案時,資料到達持久儲存空間。 |
LockFileCreateWrite |
等待建立資料目錄鎖定檔案時寫入資料。 |
LockFileRecheckdatadirRead |
等待重新檢查資料目錄鎖定檔案時讀取資料。 |
LogicalRewriteCheckpointSync |
等待邏輯重寫對應在檢查點期間到達持久儲存空間。 |
LogicalRewriteMappingSync |
等待對應資料在邏輯重寫期間到達持久儲存空間。 |
LogicalRewriteMappingWrite |
等待在邏輯重寫期間寫入對應資料。 |
LogicalRewriteSync |
等待邏輯重寫對應到達持久儲存空間。 |
LogicalRewriteTruncate |
等待在邏輯重寫期間截斷對應資料。 |
LogicalRewriteWrite |
等待寫入邏輯重寫對應。 |
RelationMapRead |
等待讀取關係對應檔案。 |
RelationMapReplace |
等待持久替換關係對應檔案。 |
RelationMapWrite |
等待寫入資料到關係對應檔案。 |
ReorderBufferRead |
等待在重新排序緩衝區管理期間讀取資料。 |
ReorderBufferWrite |
等待在重新排序緩衝區管理期間寫入資料。 |
ReorderLogicalMappingRead |
等待在重新排序緩衝區管理期間讀取邏輯對應。 |
ReplicationSlotRead |
等待從複製槽控制檔案讀取資料。 |
ReplicationSlotRestoreSync |
等待複製槽控制檔案在還原到記憶體時到達持久儲存空間。 |
ReplicationSlotSync |
等待複製槽控制檔案到達持久儲存空間。 |
ReplicationSlotWrite |
等待寫入資料到複製槽控制檔案。 |
SlruFlushSync |
等待 SLRU 資料在檢查點或資料庫關閉期間到達持久儲存空間。 |
SlruRead |
等待讀取 SLRU 頁面。 |
SlruSync |
等待 SLRU 資料在頁面寫入後到達持久儲存空間。 |
SlruWrite |
等待寫入資料到 SLRU 頁面。 |
SnapbuildRead |
等待讀取序列化的歷史目錄快照。 |
SnapbuildSync |
等待序列化的歷史目錄快照到達持久儲存空間。 |
SnapbuildWrite |
等待寫入序列化的歷史目錄快照。 |
TimelineHistoryFileSync |
等待透過串流複製接收的時間軸歷史記錄檔案到達持久儲存空間。 |
TimelineHistoryFileWrite |
等待寫入透過串流複製接收的時間軸歷史記錄檔案。 |
TimelineHistoryRead |
等待讀取時間軸歷史記錄檔案。 |
TimelineHistorySync |
等待新建立的時間軸歷史記錄檔案到達持久儲存空間。 |
TimelineHistoryWrite |
等待寫入新建立的時間軸歷史記錄檔案。 |
TwophaseFileRead |
等待讀取兩階段狀態檔案。 |
TwophaseFileSync |
等待兩階段狀態檔案到達持久儲存空間。 |
TwophaseFileWrite |
等待寫入兩階段狀態檔案。 |
VersionFileSync |
等待建立資料庫時,版本檔案到達持久儲存空間。 |
VersionFileWrite |
等待建立資料庫時寫入版本檔案。 |
WalsenderTimelineHistoryRead |
等待在 walsender 時間軸命令期間從時間軸歷史記錄檔案讀取資料。 |
WalBootstrapSync |
等待在引導啟動期間 WAL 到達持久儲存空間。 |
WalBootstrapWrite |
等待在引導啟動期間寫入 WAL 頁面。 |
WalCopyRead |
正在複製現有的 WAL 區段來建立新的 WAL 區段,並等待讀取。 |
WalCopySync |
正在複製現有的 WAL 區段來建立新的 WAL 區段,並等待其到達耐久儲存。 |
WalCopyWrite |
正在複製現有的 WAL 區段來建立新的 WAL 區段,並等待寫入。 |
WalInitSync |
正在等待新初始化的 WAL 檔案到達耐久儲存。 |
WalInitWrite |
正在初始化新的 WAL 檔案,並等待寫入。 |
WalRead |
正在等待從 WAL 檔案讀取。 |
WalSummaryRead |
正在等待從 WAL 摘要檔案讀取。 |
WalSummaryWrite |
正在等待寫入 WAL 摘要檔案。 |
WalSync |
正在等待 WAL 檔案到達耐久儲存。 |
WalSyncMethodAssign |
正在指派新的 WAL 同步方法時,等待資料到達耐久儲存。 |
WalWrite |
正在等待寫入 WAL 檔案。 |
表 27.10. 類型為 Ipc
的等待事件
IPC 等待事件 |
描述 |
---|---|
AppendReady |
正在等待 Append 計劃節點的子計劃節點準備就緒。 |
ArchiveCleanupCommand |
正在等待 archive_cleanup_command 完成。 |
ArchiveCommand |
正在等待 archive_command 完成。 |
BackendTermination |
正在等待另一個後端的終止。 |
BackupWaitWalArchive |
正在等待備份所需的 WAL 檔案成功歸檔。 |
BgworkerShutdown |
正在等待背景工作程序關閉。 |
BgworkerStartup |
正在等待背景工作程序啟動。 |
BtreePage |
正在等待繼續平行 B-tree 掃描所需的頁碼可用。 |
BufferIo |
正在等待緩衝區 I/O 完成。 |
CheckpointDelayComplete |
正在等待阻止檢查點完成的後端完成。 |
CheckpointDelayStart |
正在等待阻止檢查點啟動的後端開始。 |
CheckpointDone |
正在等待檢查點完成。 |
CheckpointStart |
正在等待檢查點開始。 |
ExecuteGather |
正在執行 Gather 計劃節點時,等待來自子程序的活動。 |
HashBatchAllocate |
正在等待選定的平行 Hash 參與者分配雜湊表。 |
HashBatchElect |
正在等待選出一個平行 Hash 參與者來分配雜湊表。 |
HashBatchLoad |
正在等待其他平行 Hash 參與者完成載入雜湊表。 |
HashBuildAllocate |
正在等待選定的平行 Hash 參與者分配初始雜湊表。 |
HashBuildElect |
正在等待選出一個平行 Hash 參與者來分配初始雜湊表。 |
HashBuildHashInner |
正在等待其他平行 Hash 參與者完成雜湊內部關係。 |
HashBuildHashOuter |
正在等待其他平行 Hash 參與者完成對外部關係進行分區。 |
HashGrowBatchesDecide |
正在等待選出一個平行 Hash 參與者來決定未來的批次增長。 |
HashGrowBatchesElect |
正在等待選出一個平行 Hash 參與者來分配更多批次。 |
HashGrowBatchesFinish |
正在等待選定的平行 Hash 參與者來決定未來的批次增長。 |
HashGrowBatchesReallocate |
正在等待選定的平行 Hash 參與者來分配更多批次。 |
HashGrowBatchesRepartition |
正在等待其他平行 Hash 參與者完成重新分區。 |
HashGrowBucketsElect |
正在等待選出一個平行 Hash 參與者來分配更多儲存桶。 |
HashGrowBucketsReallocate |
正在等待選定的平行 Hash 參與者完成分配更多儲存桶。 |
HashGrowBucketsReinsert |
正在等待其他平行 Hash 參與者完成將元組插入到新的儲存桶中。 |
LogicalApplySendData |
正在等待邏輯複製領導應用程序將資料傳送到平行應用程序。 |
LogicalParallelApplyStateChange |
正在等待邏輯複製平行應用程序更改狀態。 |
LogicalSyncData |
正在等待邏輯複製遠端伺服器傳送資料以進行初始表同步。 |
LogicalSyncStateChange |
正在等待邏輯複製遠端伺服器更改狀態。 |
MessageQueueInternal |
正在等待另一個程序附加到共享訊息佇列。 |
MessageQueuePutMessage |
正在等待將協議訊息寫入共享訊息佇列。 |
MessageQueueReceive |
正在等待從共享訊息佇列接收位元組。 |
MessageQueueSend |
正在等待將位元組傳送到共享訊息佇列。 |
MultixactCreation |
正在等待 multixact 建立完成。 |
ParallelBitmapScan |
正在等待平行位圖掃描初始化。 |
ParallelCreateIndexScan |
正在等待平行 CREATE INDEX 工作程序完成堆積掃描。 |
ParallelFinish |
正在等待平行工作程序完成計算。 |
ProcarrayGroupUpdate |
正在等待群組領導者在交易結束時清除交易 ID。 |
ProcSignalBarrier |
正在等待所有後端處理屏障事件。 |
Promote |
正在等待備用伺服器升級。 |
RecoveryConflictSnapshot |
正在等待清理 vacuum 造成的復原衝突解決。 |
RecoveryConflictTablespace |
正在等待刪除表空間造成的復原衝突解決。 |
RecoveryEndCommand |
正在等待 recovery_end_command 完成。 |
RecoveryPause |
正在等待恢復繼續。 |
ReplicationOriginDrop |
正在等待複製來源變為非使用中,以便可以刪除它。 |
ReplicationSlotDrop |
正在等待複製槽變為非使用中,以便可以刪除它。 |
RestoreCommand |
正在等待 restore_command 完成。 |
SafeSnapshot |
正在等待取得 READ ONLY DEFERRABLE 交易的有效快照。 |
SyncRep |
正在同步複製期間,等待來自遠端伺服器的確認。 |
WalReceiverExit |
正在等待 WAL 接收器退出。 |
WalReceiverWaitStart |
正在等待啟動程序傳送串流複製的初始資料。 |
WalSummaryReady |
正在等待產生新的 WAL 摘要。 |
XactGroupUpdate |
正在等待群組領導者在交易結束時更新交易狀態。 |
表 27.11. 類型為 Lock
的等待事件
Lock 等待事件 |
描述 |
---|---|
advisory |
正在等待取得諮詢使用者鎖定。 |
applytransaction |
正在等待取得邏輯複製訂閱者正在套用的遠端交易上的鎖定。 |
extend |
正在等待擴展關係。 |
frozenid |
正在等待更新 pg_database .datfrozenxid 和 pg_database .datminmxid 。 |
object |
正在等待取得非關係資料庫物件上的鎖定。 |
page |
正在等待取得關係頁面上的鎖定。 |
relation |
正在等待取得關係上的鎖定。 |
spectoken |
正在等待取得推測性插入鎖定。 |
transactionid |
正在等待交易完成。 |
tuple |
等待取得 tuple 的鎖定。 |
userlock |
等待取得使用者鎖定。 |
virtualxid |
等待取得虛擬交易 ID 鎖定;參閱第 66.1 節。 |
表 27.12. Lwlock
類型的等待事件
LWLock 等待事件 |
描述 |
---|---|
AddinShmemInit |
等待管理擴充元件在共享記憶體中的空間配置。 |
AutoFile |
等待更新 postgresql.auto.conf 檔案。 |
Autovacuum |
等待讀取或更新自動回收工作者的目前狀態。 |
AutovacuumSchedule |
等待確認選定進行自動回收的表仍需要回收。 |
BackgroundWorker |
等待讀取或更新背景工作者狀態。 |
BtreeVacuum |
等待讀取或更新 B-tree 索引的回收相關資訊。 |
BufferContent |
等待存取記憶體中的資料頁面。 |
BufferMapping |
等待將資料區塊與緩衝池中的緩衝區相關聯。 |
CheckpointerComm |
等待管理 fsync 請求。 |
CommitTs |
等待讀取或更新交易提交時間戳記的最後設定值。 |
CommitTsBuffer |
等待 commit timestamp SLRU 緩衝區上的 I/O。 |
CommitTsSLRU |
等待存取 commit timestamp SLRU 快取。 |
ControlFile |
等待讀取或更新 pg_control 檔案或建立新的 WAL 檔案。 |
DSMRegistry |
等待讀取或更新動態共享記憶體登錄。 |
DSMRegistryDSA |
等待存取動態共享記憶體登錄的動態共享記憶體分配器。 |
DSMRegistryHash |
等待存取動態共享記憶體登錄的共享雜湊表。 |
DynamicSharedMemoryControl |
等待讀取或更新動態共享記憶體分配資訊。 |
InjectionPoint |
等待讀取或更新與注入點相關的資訊。 |
LockFastPath |
等待讀取或更新程序的快速路徑鎖定資訊。 |
LockManager |
等待讀取或更新有關“重型”鎖定的資訊。 |
LogicalRepLauncherDSA |
等待存取邏輯複製啟動器的動態共享記憶體分配器。 |
LogicalRepLauncherHash |
等待存取邏輯複製啟動器的共享雜湊表。 |
LogicalRepWorker |
等待讀取或更新邏輯複製工作者的狀態。 |
MultiXactGen |
等待讀取或更新共享 multixact 狀態。 |
MultiXactMemberBuffer |
等待 multixact member SLRU 緩衝區上的 I/O。 |
MultiXactMemberSLRU |
等待存取 multixact member SLRU 快取。 |
MultiXactOffsetBuffer |
等待 multixact offset SLRU 緩衝區上的 I/O。 |
MultiXactOffsetSLRU |
等待存取 multixact offset SLRU 快取。 |
MultiXactTruncation |
等待讀取或截斷 multixact 資訊。 |
NotifyBuffer |
等待 NOTIFY 訊息 SLRU 緩衝區上的 I/O。 |
NotifyQueue |
等待讀取或更新 NOTIFY 訊息。 |
NotifyQueueTail |
等待更新 NOTIFY 訊息儲存的限制。 |
NotifySLRU |
等待存取 NOTIFY 訊息 SLRU 快取。 |
OidGen |
等待分配新的 OID。 |
ParallelAppend |
等待在平行附加計劃執行期間選擇下一個子計劃。 |
ParallelHashJoin |
等待在平行雜湊聯結計劃執行期間同步工作者。 |
ParallelQueryDSA |
等待平行查詢動態共享記憶體分配。 |
ParallelVacuumDSA |
等待平行回收動態共享記憶體分配。 |
PerSessionDSA |
等待平行查詢動態共享記憶體分配。 |
PerSessionRecordType |
等待存取平行查詢關於複合型別的資訊。 |
PerSessionRecordTypmod |
等待存取平行查詢關於識別匿名記錄型別的型別修飾詞的資訊。 |
PerXactPredicateList |
等待存取在平行查詢期間,目前可序列化交易持有的述詞鎖定列表。 |
PgStatsData |
等待共享記憶體統計資料存取。 |
PgStatsDSA |
等待統計資料動態共享記憶體分配器存取。 |
PgStatsHash |
等待統計資料共享記憶體雜湊表存取。 |
PredicateLockManager |
等待存取可序列化交易使用的述詞鎖定資訊。 |
ProcArray |
等待存取共享的每個程序資料結構(通常是為了取得快照或報告會話的交易 ID)。 |
RelationMapping |
等待讀取或更新 pg_filenode.map 檔案(用於追蹤某些系統目錄的 filenode 指派)。 |
RelCacheInit |
等待讀取或更新 pg_internal.init 關係快取初始化檔案。 |
ReplicationOrigin |
等待建立、捨棄或使用複製起點。 |
ReplicationOriginState |
等待讀取或更新一個複製起點的進度。 |
ReplicationSlotAllocation |
等待分配或釋放複製槽。 |
ReplicationSlotControl |
等待讀取或更新複製槽狀態。 |
ReplicationSlotIO |
等待複製槽上的 I/O。 |
SerialBuffer |
等待可序列化交易衝突 SLRU 緩衝區上的 I/O。 |
SerialControl |
等待讀取或更新共享的 pg_serial 狀態。 |
SerializableFinishedList |
等待存取已完成的可序列化交易列表。 |
SerializablePredicateList |
等待存取可序列化交易持有的述詞鎖定列表。 |
SerializableXactHash |
等待讀取或更新關於可序列化交易的資訊。 |
SerialSLRU |
等待存取可序列化交易衝突 SLRU 快取。 |
SharedTidBitmap |
等待在平行位元圖索引掃描期間存取共享的 TID 位元圖。 |
SharedTupleStore |
等待在平行查詢期間存取共享的 tuple 儲存區。 |
ShmemIndex |
等待在共享記憶體中尋找或分配空間。 |
SInvalRead |
等待從共享目錄失效佇列中檢索訊息。 |
SInvalWrite |
等待將訊息新增到共享目錄失效佇列。 |
SubtransBuffer |
等待子交易 SLRU 緩衝區上的 I/O。 |
SubtransSLRU |
等待存取子交易 SLRU 快取。 |
SyncRep |
等待讀取或更新有關同步複製狀態的資訊。 |
SyncScan |
等待選擇同步表掃描的起始位置。 |
TablespaceCreate |
等待建立或捨棄表空間。 |
TwoPhaseState |
等待讀取或更新已預備交易的狀態。 |
WaitEventCustom |
等待讀取或更新自訂等待事件資訊。 |
WALBufMapping |
等待替換 WAL 緩衝區中的頁面。 |
WALInsert |
等待將 WAL 資料插入記憶體緩衝區。 |
WALSummarizer |
等待讀取或更新 WAL 摘要狀態。 |
WALWrite |
等待將 WAL 緩衝區寫入磁碟。 |
WrapLimitsVacuum |
等待更新交易 ID 和 multixact 消耗的限制。 |
XactBuffer |
正在等待交易狀態 SLRU 緩衝區上的 I/O。 |
XactSLRU |
正在等待存取交易狀態 SLRU 快取。 |
XactTruncation |
正在等待執行 pg_xact_status 或更新可用的最舊交易 ID。 |
XidGen |
正在等待配置新的交易 ID。 |
表 27.13. 類型為 Timeout
的等待事件
Timeout 等待事件 |
描述 |
---|---|
BaseBackupThrottle |
在基礎備份期間等待,以進行活動節流。 |
CheckpointWriteDelay |
在執行檢查點時,在寫入之間等待。 |
PgSleep |
由於呼叫 pg_sleep 或相關函數而等待。 |
RecoveryApplyDelay |
由於延遲設定,在復原期間等待套用 WAL。 |
RecoveryRetrieveRetryInterval |
在復原期間等待,因為無法從任何來源取得 WAL 資料(pg_wal 、封存或串流)。 |
RegisterSyncRequest |
正在等待傳送同步請求給檢查點程式,因為請求佇列已滿。 |
SpinDelay |
在取得競爭激烈的自旋鎖時等待。 |
VacuumDelay |
在基於成本的 vacuum 延遲點中等待。 |
VacuumTruncate |
等待取得獨佔鎖,以便截斷已 vacuum 資料表末端的任何空白頁面。 |
WalSummarizerError |
在 WAL 摘要器錯誤後等待。 |
以下是如何檢視等待事件的範例
SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL; pid | wait_event_type | wait_event ------+-----------------+------------ 2540 | Lock | relation 6644 | LWLock | ProcArray (2 rows)
SELECT a.pid, a.wait_event, w.description FROM pg_stat_activity a JOIN pg_wait_events w ON (a.wait_event_type = w.type AND a.wait_event = w.name) WHERE a.wait_event is NOT NULL and a.state = 'active'; -[ RECORD 1 ]------------------------------------------------------------------ pid | 686674 wait_event | WALInitSync description | Waiting for a newly initialized WAL file to reach durable storage
pg_stat_replication
#pg_stat_replication
檢視表將包含每個 WAL 發送者進程的一列,顯示關於複製到該發送者所連線的待命伺服器的統計資料。僅列出直接連線的待命伺服器;沒有關於下游待命伺服器的資訊。
表 27.14. pg_stat_replication
檢視表
欄位 類型 描述 |
---|
WAL 發送者進程的進程 ID |
登入此 WAL 發送者進程的使用者的 OID |
登入此 WAL 發送者進程的使用者的名稱 |
連線到此 WAL 發送者的應用程式的名稱 |
連線到此 WAL 發送者的客戶端的 IP 位址。如果此欄位為 null,表示客戶端透過伺服器機器上的 Unix socket 連線。 |
已連接用戶端的主機名稱,由 |
客戶端用於與此 WAL 發送者通訊的 TCP 連接埠號碼,如果使用 Unix socket 則為 |
此進程啟動的時間,也就是客戶端連線到此 WAL 發送者的時間 |
此待命伺服器由 hot_standby_feedback 報告的 |
目前 WAL 發送者狀態。可能的值為
|
在此連線上傳送的最後一個預寫日誌位置 |
此待命伺服器寫入磁碟的最後一個預寫日誌位置 |
此待命伺服器刷新到磁碟的最後一個預寫日誌位置 |
在此待命伺服器上重新播放到資料庫的最後一個預寫日誌位置 |
在本地刷新最近的 WAL 和接收到此待命伺服器已寫入它(但尚未刷新或套用它)的通知之間經過的時間。如果此伺服器配置為同步待命伺服器,則此可用於衡量在提交時 |
在本地刷新最近的 WAL 和接收到此待命伺服器已寫入並刷新它(但尚未套用它)的通知之間經過的時間。如果此伺服器配置為同步待命伺服器,則此可用於衡量在提交時 |
在本地刷新最近的 WAL 和接收到此待命伺服器已寫入、刷新並套用它的通知之間經過的時間。如果此伺服器配置為同步待命伺服器,則此可用於衡量在提交時 |
在基於優先順序的同步複製中,此待命伺服器被選為同步待命伺服器的優先順序。這在基於仲裁的同步複製中無效。 |
此待命伺服器的同步狀態。可能的值為
|
從待命伺服器接收的最後一個回覆訊息的傳送時間 |
在 pg_stat_replication
檢視表中報告的延遲時間是測量最近的 WAL 被寫入、刷新和重新播放,以及發送者知道它的時間。這些時間表示如果遠端伺服器配置為同步待命伺服器,則每個同步提交層級引入的(或可能已經引入的)提交延遲。對於非同步待命伺服器,replay_lag
欄位近似於最近的交易對查詢可見之前的延遲。如果待命伺服器已完全趕上發送伺服器並且沒有更多的 WAL 活動,則最近測量的延遲時間將繼續顯示一小段時間,然後顯示 NULL。
延遲時間自動適用於實體複製。邏輯解碼外掛程式可以選擇性地發出追蹤訊息;如果它們不這樣做,追蹤機制將簡單地顯示 NULL 延遲。
回報的延遲時間並非假設以目前的重播速率,備用伺服器趕上傳送伺服器所需時間的預測。 這樣一個系統會在產生新的 WAL 時顯示類似的時間,但在傳送端閒置時會有所不同。 特別是,當備用伺服器完全趕上時,pg_stat_replication
顯示的是寫入、刷新和重播最新回報 WAL 位置所花費的時間,而不是某些使用者可能預期的零。 這與衡量最近寫入交易的同步提交和交易可見性延遲的目標一致。 為了減少使用者對不同延遲模型的混淆,延遲欄位在完全重播的閒置系統上短時間後會恢復為 NULL。 監控系統應選擇將其表示為遺失資料、零或繼續顯示最後已知的數值。
pg_stat_replication_slots
#pg_stat_replication_slots
檢視會包含每個邏輯複製槽的一列,顯示其使用情況的統計資訊。
表格 27.15. pg_stat_replication_slots
檢視
欄位 類型 描述 |
---|
複製槽的唯一叢集範圍識別符 |
一旦邏輯解碼用於解碼 WAL 變更的記憶體超過 |
在此槽解碼 WAL 變更時,交易溢寫到磁碟的次數。 每次交易溢寫時,此計數器都會遞增,且同一交易可能會溢寫多次。 |
在此槽執行 WAL 變更解碼時,溢寫到磁碟的解碼交易資料量。 此計數器和其他溢寫計數器可用於衡量邏輯解碼期間發生的 I/O,並允許調整 |
在此槽的邏輯解碼用於解碼 WAL 變更的記憶體超過 |
在此槽解碼 WAL 變更時,進行中交易串流到解碼輸出外掛程式的次數。 每次交易串流時,此計數器都會遞增,且同一交易可能會串流多次。 |
在此槽解碼 WAL 變更時,解碼用於將進行中交易串流到解碼輸出外掛程式的交易資料量。 此計數器和此槽的其他串流計數器可用於調整 |
傳送到此槽的解碼輸出外掛程式的解碼交易數量。 這僅計算頂層交易,不會針對子交易遞增。 請注意,這包括串流和/或溢寫的交易。 |
在此槽解碼 WAL 變更時,解碼用於將交易傳送到解碼輸出外掛程式的交易資料量。 請注意,這包括串流和/或溢寫的資料。 |
上次重設這些統計資訊的時間 |
pg_stat_wal_receiver
#pg_stat_wal_receiver
檢視將僅包含一列,顯示來自該接收器所連線伺服器的 WAL 接收器的統計資訊。
表格 27.16. pg_stat_wal_receiver
檢視
欄位 類型 描述 |
---|
WAL 接收器程序的程序 ID |
WAL 接收器程序的活動狀態 |
WAL 接收器啟動時使用的第一個預寫日誌位置 |
WAL 接收器啟動時使用的第一個時間軸編號 |
已接收並寫入磁碟但未刷新的最後預寫日誌位置。 這不應用於資料完整性檢查。 |
已接收並刷新到磁碟的最後預寫日誌位置,此欄位的初始值是 WAL 接收器啟動時使用的第一個日誌位置 |
已接收並刷新到磁碟的最後預寫日誌位置的時間軸編號,此欄位的初始值是 WAL 接收器啟動時使用的第一個日誌位置的時間軸編號 |
從來源 WAL 傳送器收到的最後一則訊息的傳送時間 |
從來源 WAL 傳送器收到的最後一則訊息的接收時間 |
回報給來源 WAL 傳送器的最後預寫日誌位置 |
回報給來源 WAL 傳送器的最後預寫日誌位置的時間 |
此 WAL 接收器使用的複製槽名稱 |
此 WAL 接收器連線到的 PostgreSQL 執行個體的主機。 這可以是主機名稱、IP 位址,或者如果連線是透過 Unix socket,則可以是目錄路徑。(路徑案例可以區分,因為它始終是絕對路徑,以 |
此 WAL 接收器連線到的 PostgreSQL 執行個體的連接埠號碼。 |
此 WAL 接收器使用的連線字串,其中安全敏感欄位已被混淆處理。 |
pg_stat_recovery_prefetch
#pg_stat_recovery_prefetch
檢視將僅包含一列。 欄位 wal_distance
、block_distance
和 io_depth
顯示目前值,其他欄位顯示可以使用 pg_stat_reset_shared
函數重設的累積計數器。
表 27.17. pg_stat_recovery_prefetch
檢視表
欄位 類型 描述 |
---|
上次重設這些統計資訊的時間 |
因為不在緩衝池中而被預取的區塊數量 |
因為已經在緩衝池中而未被預取的區塊數量 |
因為將會被零初始化而未被預取的區塊數量 |
因為還不存在而未被預取的區塊數量 |
因為 WAL 中包含完整頁面映像而未被預取的區塊數量 |
因為最近已經被預取而未被預取的區塊數量 |
預取器超前多少位元組 |
預取器超前多少區塊 |
已啟動但尚未得知是否完成的預取數量 |
pg_stat_subscription
#表 27.18. pg_stat_subscription
檢視表
欄位 類型 描述 |
---|
訂閱的 OID |
訂閱的名稱 |
訂閱工作處理程序的類型。可能的類型為 |
訂閱工作處理程序的處理程序 ID |
如果此處理程序是平行套用工作處理程序,則為領導者套用工作處理程序的處理程序 ID;如果此處理程序是領導者套用工作處理程序或資料表同步工作處理程序,則為 NULL |
工作處理程序正在同步的關係的 OID;領導者套用工作處理程序和平行套用工作處理程序為 NULL |
接收到的最後一個預寫式日誌位置,此欄位的初始值為 0;平行套用工作處理程序為 NULL |
從原始 WAL 傳送器接收到的最後一則訊息的傳送時間;平行套用工作處理程序為 NULL |
從原始 WAL 傳送器接收到的最後一則訊息的接收時間;平行套用工作處理程序為 NULL |
報告給原始 WAL 傳送器的最後一個預寫式日誌位置;平行套用工作處理程序為 NULL |
報告給原始 WAL 傳送器的最後一個預寫式日誌位置的時間;平行套用工作處理程序為 NULL |
pg_stat_subscription_stats
#pg_stat_subscription_stats
檢視表將包含每個訂閱一行。
表 27.19. pg_stat_subscription_stats
檢視表
欄位 類型 描述 |
---|
訂閱的 OID |
訂閱的名稱 |
套用變更時發生錯誤的次數 |
在初始資料表同步期間發生錯誤的次數 |
上次重設這些統計資訊的時間 |
pg_stat_ssl
#pg_stat_ssl
檢視表將包含每個後端或 WAL 傳送器處理程序一行,顯示此連線的 SSL 使用統計資訊。它可以與 pg_stat_activity
或 pg_stat_replication
在 pid
欄上聯結,以取得有關連線的更多詳細資訊。
表 27.20. pg_stat_ssl
檢視表
欄位 類型 描述 |
---|
後端或 WAL 傳送器處理程序的處理程序 ID |
如果此連線使用 SSL,則為 True |
使用的 SSL 版本,如果此連線未使用 SSL,則為 NULL |
使用的 SSL 密碼名稱,如果此連線未使用 SSL,則為 NULL |
使用的加密演算法中的位元數,如果此連線未使用 SSL,則為 NULL |
從使用的用戶端憑證取得的辨別名稱 (DN) 欄位,如果未提供任何用戶端憑證,或者此連線未使用 SSL,則為 NULL。如果 DN 欄位長於 |
用戶端憑證的序號,如果未提供任何用戶端憑證,或者此連線未使用 SSL,則為 NULL。憑證序號和憑證簽發者的組合可唯一識別憑證(除非簽發者錯誤地重複使用序號)。 |
用戶端憑證的簽發者的 DN,如果未提供任何用戶端憑證,或者此連線未使用 SSL,則為 NULL。此欄位會像 |
pg_stat_gssapi
#pg_stat_gssapi
檢視表將包含每個後端一行,顯示此連線的 GSSAPI 使用資訊。它可以與 pg_stat_activity
或 pg_stat_replication
在 pid
欄上聯結,以取得有關連線的更多詳細資訊。
表 27.21. pg_stat_gssapi
檢視表
欄位 類型 描述 |
---|
後端的處理程序 ID |
如果此連線使用 GSSAPI 驗證,則為 True |
用於驗證此連線的主體,如果未使用 GSSAPI 驗證此連線,則為 NULL。如果主體長於 |
如果此連線正在使用 GSSAPI 加密,則為 True |
如果在此連線上委派了 GSSAPI 認證,則為 True。 |
pg_stat_archiver
#pg_stat_archiver
檢視表將始終具有單行,其中包含有關叢集封存程式處理程序的資料。
表 27.22. pg_stat_archiver
檢視表
欄位 類型 描述 |
---|
已成功封存的 WAL 檔案數量 |
最近一次成功封存的 WAL 檔案名稱 |
最近一次成功封存作業的時間 |
封存 WAL 檔案的失敗嘗試次數 |
最近一次封存失敗作業的 WAL 檔案名稱 |
最近一次封存失敗作業的時間 |
上次重設這些統計資訊的時間 |
通常,WAL 檔案會按照從舊到新的順序進行封存,但這並非絕對保證,並且在特殊情況下(例如提升備用伺服器或發生崩潰恢復後)可能不成立。因此,不能安全地假設所有比 last_archived_wal
舊的檔案也都已成功封存。
pg_stat_io
#pg_stat_io
檢視表將包含每個後端類型、目標 I/O 物件和 I/O 環境的組合的一列,顯示叢集範圍的 I/O 統計資訊。不合理的組合將被省略。
目前,追蹤在關係 (例如,表格、索引) 上的 I/O。 但是,繞過共享緩衝區的關係 I/O(例如,將表格從一個表空間移動到另一個表空間時)目前不被追蹤。
表格 27.23. pg_stat_io
檢視表
欄位 類型 描述 |
---|
後端類型 (例如,背景工作程序、自動清理工作程序)。 有關 |
I/O 操作的目標物件。 可能的值包括
|
I/O 操作的環境。 可能的值包括
|
讀取操作的次數,每次操作的大小在 |
在讀取操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零) |
寫入操作的次數,每次操作的大小在 |
在寫入操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零) |
程序請求核心寫入永久儲存的 |
在寫回操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零)。 這包括花費在對寫出請求進行排隊的時間,以及可能花費在寫出臟資料的時間。 |
關係擴展操作的次數,每次操作的大小在 |
在擴展操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零) |
每個 I/O 讀取、寫入或擴展單位的位元組數。 關係資料的讀取、寫入和擴展以 |
在共享緩衝區中找到所需區塊的次數。 |
為了使其可用於其他用途,區塊從共享或本地緩衝區寫出的次數。 在 |
在共享緩衝區之外的大小受限的環形緩衝區中,現有緩衝區作為 |
|
在 fsync 操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零) |
上次重設這些統計資訊的時間。 |
某些後端類型永遠不會對某些 I/O 物件和/或在某些 I/O 環境中執行 I/O 操作。 這些列會從檢視表中省略。 例如,檢查點程序不會對暫時表格進行檢查點,因此不會有 backend_type
checkpointer
和 object
temp relation
的列。
此外,某些 I/O 操作永遠不會由某些後端類型或在某些 I/O 物件和/或在某些 I/O 環境中執行。 這些儲存格將為 NULL。 例如,暫時表格不會 fsync
,因此 fsyncs
對於 object
temp relation
將為 NULL。 此外,背景寫入程序不執行讀取,因此在 backend_type
background writer
的列中,reads
將為 NULL。
pg_stat_io
可用於提供資料庫調整的資訊。 例如
只有在啟用 track_io_timing 時,追蹤 I/O 時間的欄位才會是非零值。使用者應該小心參考這些欄位,並搭配對應的 I/O 操作,以防自上次統計重設以來,track_io_timing
未啟用。
pg_stat_bgwriter
#pg_stat_bgwriter
檢視表永遠只有單一列,包含叢集背景寫入程序的資料。
表 27.24. pg_stat_bgwriter
檢視表
欄位 類型 描述 |
---|
背景寫入程序寫入的緩衝區數量 |
背景寫入程序因寫入過多緩衝區而停止清理掃描的次數 |
已配置的緩衝區數量 |
上次重設這些統計資訊的時間 |
pg_stat_checkpointer
#pg_stat_checkpointer
檢視表永遠只有單一列,包含叢集檢查點程序(checkpointer)的資料。
表 27.25. pg_stat_checkpointer
檢視表
欄位 類型 描述 |
---|
因逾時而排定的檢查點數量。請注意,如果伺服器自上次檢查點以來一直處於閒置狀態,則可能會跳過檢查點,此值會計算已完成和已跳過的檢查點 |
已執行的要求檢查點數量 |
因逾時或嘗試失敗後排定的重新啟動點數量 |
要求的重新啟動點數量 |
已執行的重新啟動點數量 |
處理檢查點和重新啟動點期間,將檔案寫入磁碟所花費的總時間(以毫秒為單位) |
處理檢查點和重新啟動點期間,將檔案同步到磁碟所花費的總時間(以毫秒為單位) |
在檢查點和重新啟動點期間寫入的緩衝區數量 |
上次重設這些統計資訊的時間 |
pg_stat_wal
#pg_stat_wal
檢視表永遠只有單一列,包含叢集 WAL 活動的資料。
表 27.26. pg_stat_wal
檢視表
欄位 類型 描述 |
---|
產生的 WAL 記錄總數 |
產生的 WAL 完整頁面映像總數 |
產生的 WAL 總量(以位元組為單位) |
由於 WAL 緩衝區已滿而將 WAL 資料寫入磁碟的次數 |
通過 |
通過 |
通過 |
通過 |
上次重設這些統計資訊的時間 |
pg_stat_database
#pg_stat_database
檢視表將包含叢集中每個資料庫的一列,加上共用物件的一列,顯示資料庫範圍的統計資訊。
表 27.27. pg_stat_database
檢視表
欄位 類型 描述 |
---|
此資料庫的 OID,如果是屬於共用關係的物件則為 0 |
此資料庫的名稱,如果是共用物件則為 |
目前連線到此資料庫的後端數量,如果是共用物件則為 |
此資料庫中已提交的交易數量 |
此資料庫中已回滾的交易數量 |
在此資料庫中讀取的磁碟區塊數量 |
已在緩衝區快取中找到磁碟區塊的次數,因此不需要讀取(這僅包括 PostgreSQL 緩衝區快取中的命中,不包括作業系統的檔案系統快取) |
在此資料庫中,循序掃描提取的活動資料列數量,以及索引掃描返回的索引條目數量 |
在此資料庫中,索引掃描提取的活動資料列數量 |
在此資料庫中,查詢插入的資料列數量 |
在此資料庫中,查詢更新的資料列數量 |
在此資料庫中,查詢刪除的資料列數量 |
由於與此資料庫中的恢復發生衝突而取消的查詢數量。(衝突僅發生在備用伺服器上;有關詳細資訊,請參閱 |
此資料庫中查詢建立的暫存檔案數量。無論暫存檔案的建立原因(例如,排序或雜湊),以及無論 log_temp_files 設定如何,都會計算所有暫存檔案。 |
此資料庫中查詢寫入暫存檔案的資料總量。無論暫存檔案的建立原因,以及無論 log_temp_files 設定如何,都會計算所有暫存檔案。 |
在此資料庫中偵測到的死鎖數量 |
在此資料庫(或共享物件上)偵測到的資料頁面校驗和失敗次數,如果未啟用資料校驗和,則為 NULL。 |
在此資料庫(或共享物件上)偵測到上次資料頁面校驗和失敗的時間,如果未啟用資料校驗和,則為 NULL。 |
此資料庫中後端讀取資料檔案區塊所花費的時間,以毫秒為單位(如果啟用 track_io_timing,否則為零) |
此資料庫中後端寫入資料檔案區塊所花費的時間,以毫秒為單位(如果啟用 track_io_timing,否則為零) |
資料庫連線在此資料庫中花費的時間,以毫秒為單位(請注意,只有在連線狀態變更時才會更新統計資訊,因此如果連線閒置了很長時間,則不會包含此閒置時間) |
在此資料庫中執行 SQL 陳述式所花費的時間,以毫秒為單位(這對應於 |
在此資料庫中處於交易中時閒置所花費的時間,以毫秒為單位(這對應於 |
已建立到此資料庫的連線總數 |
由於與用戶端的連線遺失而終止的此資料庫連線數 |
由於嚴重錯誤而終止的此資料庫連線數 |
由於操作員介入而終止的此資料庫連線數 |
上次重設這些統計資訊的時間 |
pg_stat_database_conflicts
#pg_stat_database_conflicts
檢視表將包含每個資料庫一行,顯示由於與待命伺服器上的復原發生衝突而導致查詢取消的資料庫範圍統計資訊。此檢視表僅包含待命伺服器上的資訊,因為衝突不會發生在主要伺服器上。
表格 27.28. pg_stat_database_conflicts
檢視表
欄位 類型 描述 |
---|
資料庫的 OID |
此資料庫的名稱 |
由於 tablespace 已卸除而取消的此資料庫中的查詢數量 |
由於鎖定逾時而取消的此資料庫中的查詢數量 |
由於舊快照而取消的此資料庫中的查詢數量 |
由於釘選的緩衝區而取消的此資料庫中的查詢數量 |
由於死鎖而取消的此資料庫中的查詢數量 |
由於舊快照或主要伺服器上的 wal_level 過低而取消的此資料庫中邏輯槽的使用次數 |
pg_stat_all_tables
#pg_stat_all_tables
檢視表將包含目前資料庫中每個表格(包括 TOAST 表格)的一行,顯示關於存取該特定表格的統計資訊。pg_stat_user_tables
和 pg_stat_sys_tables
檢視表包含相同的資訊,但會篩選為僅顯示使用者表格和系統表格。
表格 27.29. pg_stat_all_tables
檢視表
欄位 類型 描述 |
---|
表格的 OID |
此表格所在的結構描述名稱 |
此表格的名稱 |
在此表格上啟動的循序掃描次數 |
基於最近的交易停止時間,此表格上一次循序掃描的時間 |
循序掃描提取的有效列數 |
在此表格上啟動的索引掃描次數 |
基於最近的交易停止時間,此表格上一次索引掃描的時間 |
索引掃描提取的有效列數 |
插入的列總數 |
更新的列總數。(這包括 |
刪除的列總數 |
HOT 更新的列數。這些更新是指索引中不需要後續版本的更新。 |
更新的列數,其中後續版本進入新的堆積頁面,留下具有指向不同堆積頁面的 |
有效列的估計數量 |
已刪除列的估計數量 |
自上次分析此表格以來修改的列的估計數量 |
自上次 vacuum 此表以來,估計插入的列數 |
上次手動 vacuum 此表的時間 (不包含 |
上次自動 vacuum 常駐程式 vacuum 此表的時間 |
上次手動 analyzed 此表的時間 |
上次自動 vacuum 常駐程式 analyzed 此表的時間 |
手動 vacuum 此表的次數 (不包含 |
自動 vacuum 常駐程式 vacuum 此表的次數 |
手動 analyzed 此表的次數 |
自動 vacuum 常駐程式 analyzed 此表的次數 |
pg_stat_all_indexes
#pg_stat_all_indexes
視窗將會包含目前資料庫中每個索引的一列,顯示關於該特定索引存取的統計資訊。pg_stat_user_indexes
和 pg_stat_sys_indexes
視窗包含相同的資訊,但經過篩選,僅分別顯示使用者和系統索引。
表 27.30. pg_stat_all_indexes
視窗
欄位 類型 描述 |
---|
此索引之表格的 OID |
此索引的 OID |
此索引所在的結構描述名稱 |
此索引之表格的名稱 |
此索引的名稱 |
在此索引上啟動的索引掃描次數 |
根據最新的事務停止時間,上次在此索引上掃描的時間 |
在此索引上掃描傳回的索引條目數量 |
透過使用此索引的簡單索引掃描所提取的即時表格列數 |
索引可由簡單索引掃描、「「點陣圖」」索引掃描和最佳化工具使用。在點陣圖掃描中,多個索引的輸出可以透過 AND 或 OR 規則組合,因此當使用點陣圖掃描時,很難將個別堆積列提取與特定索引相關聯。因此,點陣圖掃描會遞增它所使用的索引的 pg_stat_all_indexes
.idx_tup_read
計數,並遞增表格的 pg_stat_all_tables
.idx_tup_fetch
計數,但它不會影響 pg_stat_all_indexes
.idx_tup_fetch
。最佳化工具也會存取索引,以檢查所提供常數的值是否在最佳化工具統計資料的記錄範圍之外,因為最佳化工具統計資料可能已過期。
即使沒有任何點陣圖掃描的使用,idx_tup_read
和 idx_tup_fetch
計數也可能不同,因為 idx_tup_read
會計算從索引擷取的索引條目,而 idx_tup_fetch
會計算從表格擷取的即時列。 如果使用索引提取任何已死或尚未提交的列,或者如果透過僅索引掃描避免任何堆積提取,則後者將會較少。
使用特定SQL結構來搜尋符合多個純量值的清單或陣列中任何值的列的查詢(請參閱第 9.25 節)在查詢執行期間執行多個「「原始」」索引掃描(每個純量值最多一個原始掃描)。 每個內部原始索引掃描都會遞增 pg_stat_all_indexes
.idx_scan
,因此索引掃描的計數可能會顯著超過索引掃描執行器節點執行的總數。
pg_statio_all_tables
#pg_statio_all_tables
視窗將會包含目前資料庫中每個表格(包括 TOAST 表格)的一列,顯示關於該特定表格 I/O 的統計資訊。pg_statio_user_tables
和 pg_statio_sys_tables
視窗包含相同的資訊,但經過篩選,僅分別顯示使用者和系統表格。
表 27.31. pg_statio_all_tables
視窗
欄位 類型 描述 |
---|
表格的 OID |
此表格所在的結構描述名稱 |
此表格的名稱 |
從此表格讀取的磁碟區塊數量 |
在此表格中的緩衝區命中數 |
從此表格上的所有索引讀取的磁碟區塊數量 |
在此表格上的所有索引中的緩衝區命中數 |
從此表格的 TOAST 表格(如果有的話)讀取的磁碟區塊數量 |
在此表格的 TOAST 表格(如果有的話)中的緩衝區命中數 |
從此表格的 TOAST 表格索引(如果有的話)讀取的磁碟區塊數量 |
在此表格的 TOAST 表格索引(如果有的話)中的緩衝區命中數 |
pg_statio_all_indexes
#pg_statio_all_indexes
視窗將會包含目前資料庫中每個索引的一列,顯示關於該特定索引 I/O 的統計資訊。pg_statio_user_indexes
和 pg_statio_sys_indexes
視窗包含相同的資訊,但經過篩選,僅分別顯示使用者和系統索引。
表 27.32. pg_statio_all_indexes
視窗
欄位 類型 描述 |
---|
此索引之表格的 OID |
此索引的 OID |
此索引所在的結構描述名稱 |
此索引之表格的名稱 |
此索引的名稱 |
從此索引讀取的磁碟區塊數量 |
在此索引中的緩衝區命中數 |
pg_statio_all_sequences
#pg_statio_all_sequences
視窗將會包含目前資料庫中每個序列的一列,顯示關於該特定序列 I/O 的統計資訊。
表 27.33. pg_statio_all_sequences
視窗
欄位 類型 描述 |
---|
序列的 OID |
此序列所在的結構描述名稱 |
此序列的名稱 |
從這個序列讀取的磁碟區塊數量 |
這個序列中的緩衝區命中次數 |
pg_stat_user_functions
#pg_stat_user_functions
視窗會為每個追蹤的函式包含一行,顯示該函式執行的統計資訊。track_functions 參數控制追蹤哪些函式。
表 27.34. pg_stat_user_functions
視窗
欄位 類型 描述 |
---|
函式的 OID |
此函式所在的綱要名稱 |
此函式的名稱 |
此函式被呼叫的次數 |
花在這個函式及其呼叫的所有其他函式中的總時間,以毫秒為單位 |
花在這個函式本身的總時間,不包括其呼叫的其他函式,以毫秒為單位 |
pg_stat_slru
#PostgreSQL 透過 SLRU
(simple least-recently-used) 快取來存取某些磁碟上的資訊。pg_stat_slru
視窗會為每個追蹤的 SLRU 快取包含一行,顯示存取快取頁面的統計資訊。
對於核心伺服器中的每個 SLRU
快取,都有一個組態參數控制其大小,並附加 _buffers
後綴。
表 27.35. pg_stat_slru
視窗
欄位 類型 描述 |
---|
SLRU 的名稱 |
初始化期間歸零的區塊數量 |
在 SLRU 中已找到磁碟區塊的次數,因此不需要讀取 (這僅包含 SLRU 中的命中,不包括作業系統的檔案系統快取) |
為此 SLRU 讀取的磁碟區塊數量 |
為此 SLRU 寫入的磁碟區塊數量 |
為此 SLRU 檢查是否存在的區塊數量 |
此 SLRU 髒資料的清除次數 |
此 SLRU 的截斷次數 |
上次重設這些統計資訊的時間 |
可以透過編寫查詢來設定檢視統計資訊的其他方式,這些查詢使用與上面顯示的標準視窗相同的底層統計存取函式。 有關函式名稱等詳細資訊,請參閱標準視窗的定義。(例如,在 psql 中,您可以發出 \d+ pg_stat_activity
。)每個資料庫統計資訊的存取函式採用資料庫 OID 作為參數,以識別要報告的資料庫。每個資料表和每個索引函式採用資料表或索引 OID。每個函式統計資訊的函式採用函式 OID。請注意,使用這些函式只能看到目前資料庫中的資料表、索引和函式。
與累計統計系統相關的其他函式列於表 27.36。
表 27.36. 其他統計函式
使用 pg_stat_reset()
也會重置 autovacuum 用於確定何時觸發 vacuum 或 analyze 的計數器。重置這些計數器可能會導致 autovacuum 無法執行必要的工作,這可能會導致諸如資料表膨脹或過時的資料表統計資料等問題。建議在重置統計資料後執行資料庫範圍的 ANALYZE
。
pg_stat_get_activity
,即 pg_stat_activity
視窗的底層函式,會傳回一組記錄,其中包含有關每個後端處理程序的所有可用資訊。有時,僅獲取此資訊的子集可能更方便。在這種情況下,可以使用另一組每個後端的統計資料存取函式;這些函式顯示在表 27.37中。這些存取函式使用會話的後端 ID 號碼,這是一個小整數 (>= 0),與任何並行會話的後端 ID 不同,儘管會話的 ID 在退出後可以立即回收。後端 ID 用於(除其他外)識別會話的暫存綱要(如果有的話)。函式 pg_stat_get_backend_idset
提供了一種方便的方法來列出所有使用中後端的 ID 號碼,以便呼叫這些函式。例如,要顯示PID和所有後端的目前查詢
SELECT pg_stat_get_backend_pid(backendid) AS pid, pg_stat_get_backend_activity(backendid) AS query FROM pg_stat_get_backend_idset() AS backendid;
表 27.37. 每個後端的統計函式
函式 描述 |
---|
傳回此後端最近查詢的文字。 |
傳回後端最近查詢開始的時間。 |
傳回連線到此後端的用戶端的 IP 位址。 |
傳回用戶端用於通訊的 TCP 連接埠號碼。 |
傳回此後端連線到的資料庫的 OID。 |
傳回目前使用中後端 ID 號碼的集合。 |
傳回此後端的處理程序 ID。 |
傳回此處理程序啟動的時間。 |
傳回有關具有指定 ID 的後端的子交易的資訊記錄。傳回的欄位為 |
傳回登入此後端的用戶的 OID。 |
如果此後端目前正在等待,則傳回等待事件類型名稱,否則傳回 NULL。有關詳細資訊,請參閱表 27.4。 |
傳回後端目前交易開始的時間。 |
如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。