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_cost_delay_timing 啟用對基於成本的 vacuum 延遲的監控。
引數 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
收集的當前查詢資訊始終是最新的。
另一個重要的點是,當伺服器程序被要求顯示任何累積的統計資訊時,在預設配置下,訪問的值會被快取直到其當前事務結束。因此,只要你繼續當前事務,統計資訊就會顯示靜態資訊。同樣,所有會話的當前查詢資訊會在事務內第一次被請求時收集,並且在整個事務期間會顯示相同的資訊。這是一個特性,而不是 bug,因為它允許你對統計資訊進行多次查詢並關聯結果,而無需擔心數字在你眼前變化。在互動式地或使用昂貴的查詢分析統計資訊時,訪問各個統計資訊之間的時間差可能導致快取的統計資訊產生顯著的偏差。為了最小化偏差,可以將 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 中顯示的動態統計資訊檢視中的某些資訊是安全受限的。普通使用者只能看到關於他們自己的會話(屬於他們是成員的角色)的所有資訊。在關於其他會話的行中,許多列將為 NULL。但是,請注意,所有使用者都可以看到會話的存在及其一般屬性,例如其會話使用者和資料庫。超級使用者和具有內建角色 pg_read_all_stats
許可權的角色可以檢視關於所有會話的所有資訊。
表 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 ANALYZE 進度報告。 |
pg_stat_progress_create_index |
每個正在執行 CREATE INDEX 或 REINDEX 的後端一行,顯示當前進度。請參閱 27.4.4 CREATE INDEX 進度報告。 |
pg_stat_progress_vacuum |
每個正在執行 VACUUM 的後端(包括 autovacuum 工作程序)一行,顯示當前進度。請參閱 27.4.5 VACUUM 進度報告。 |
pg_stat_progress_cluster |
每個正在執行 CLUSTER 或 VACUUM FULL 的後端一行,顯示當前進度。請參閱 27.4.2 CLUSTER 進度報告。 |
pg_stat_progress_basebackup |
每個正在流式傳輸基礎備份的 WAL 傳送程序一行,顯示當前進度。請參閱 27.4.6 Base Backup 進度報告。 |
pg_stat_progress_copy |
每個正在執行 COPY 的後端一行,顯示當前進度。請參閱 27.4.3 COPY 進度報告。 |
表 27.2. 收集的統計資訊檢視
檢視名稱 | 描述 |
---|---|
pg_stat_archiver |
只有一行,顯示有關 WAL 歸檔程序活動的資訊。有關詳細資訊,請參閱 pg_stat_archiver 。 |
pg_stat_bgwriter |
只有一行,顯示有關後臺寫入程序活動的資訊。有關詳細資訊,請參閱 pg_stat_bgwriter 。 |
pg_stat_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 地址。如果此欄位為 NULL,則表示客戶端透過伺服器上的 Unix 套接字連線,或者這是一個內部程序(例如 autovacuum)。 |
連線客戶端的主機名,由 |
客戶端用於與此後端通訊的 TCP 埠號,如果使用 Unix 套接字,則為 |
此程序啟動的時間。對於客戶端後端,這是客戶端連線到伺服器的時間。 |
此程序當前事務啟動的時間,如果當前沒有活動的事務,則為 NULL。如果當前查詢是其事務中的第一個查詢,則此列等於 |
當前活動查詢啟動的時間,或者如果 |
|
後端正在等待的事件型別(如果有);否則為 NULL。請參閱 表 27.4。 |
|
此後端的當前總體狀態。可能的值為:
|
此後端的頂層事務識別符號(如果有);請參閱 67.1 事務和識別符號。 |
當前後端的 |
此後端最近一次查詢的識別符號。如果 |
此後端最近一次查詢的文字。如果 |
當前後端的型別。可能的型別包括 |
wait_event
和 state
列是獨立的。如果後端處於 active
狀態,它可能正在等待某個事件,也可能沒有。如果狀態為 active
且 wait_event
非 NULL,則表示正在執行查詢,但該查詢在系統中被阻塞了。為了降低報告開銷,系統不會嘗試同步後端活動資料的不同方面。因此,檢視的列之間可能存在短暫的差異。
表 27.4. 等待事件型別
等待事件型別 | 描述 |
---|---|
Activity |
伺服器程序空閒。此事件型別指示程序在其主處理迴圈中等待活動。wait_event 將標識具體的等待點;請參閱 表 27.5。 |
BufferPin |
伺服器程序正在等待對資料緩衝區的獨佔訪問。如果另一個程序持有對所討論緩衝區的最後一次讀取資料的遊標,則緩衝區 pin 等待可能會很長。請參閱 表 27.6。 |
Client |
伺服器程序正在等待使用者應用程式連線的套接字上的活動。因此,伺服器期望發生一些獨立於其內部程序的事件。wait_event 將標識具體的等待點;請參閱 表 27.7。 |
Extension |
伺服器程序正在等待由擴充套件模組定義的某個條件。請參閱 表 27.8。 |
InjectionPoint |
伺服器程序正在等待注入點達到測試中定義的某個結果。有關更多詳細資訊,請參閱 36.10.14 注入點。此型別沒有預定義的等待點。 |
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 |
自動 vacuum 啟動器程序主迴圈等待。 |
BgwriterHibernate |
後臺寫入程序休眠等待。 |
BgwriterMain |
後臺寫入程序主迴圈等待。 |
CheckpointerMain |
檢查點程序主迴圈等待。 |
CheckpointerShutdown |
等待檢查點程序終止。 |
IoWorkerMain |
IO 工作程序主迴圈等待。 |
LogicalApplyMain |
邏輯複製應用程序主迴圈等待。 |
LogicalLauncherMain |
邏輯複製啟動器程序主迴圈等待。 |
LogicalParallelApplyMain |
邏輯複製並行應用程序主迴圈等待。 |
RecoveryWalStream |
在流式恢復期間,啟動程序等待 WAL 到達。 |
ReplicationSlotsyncMain |
槽同步工作程序主迴圈等待。 |
ReplicationSlotsyncShutdown |
等待槽同步工作程序關閉。 |
SysloggerMain |
日誌記錄程序主迴圈等待。 |
WalReceiverMain |
WAL 接收器程序主迴圈等待。 |
WalSenderMain |
WAL 傳送器程序主迴圈等待。 |
WalSummarizerWal |
WAL 摘要程式等待更多 WAL 的生成。 |
WalWriterMain |
WAL 寫入器程序主迴圈等待。 |
表 27.6. 型別為 Bufferpin
的等待事件
BufferPin 等待事件 |
描述 |
---|---|
BufferPin |
等待獲取緩衝區的獨佔 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 等待事件 |
描述 |
---|---|
AioIoCompletion |
等待另一個程序完成 IO。 |
AioIoUringExecution |
透過 io_uring 等待 IO 執行。 |
AioIoUringSubmit |
透過 io_uring 等待 IO 提交。 |
BasebackupRead |
等待基礎備份從檔案讀取。 |
BasebackupSync |
等待基礎備份寫入的資料到達持久儲存。 |
BasebackupWrite |
等待基礎備份寫入檔案。 |
BuffileRead |
等待從緩衝檔案中讀取。 |
BuffileTruncate |
等待截斷緩衝檔案。 |
BuffileWrite |
等待寫入緩衝檔案。 |
ControlFileRead |
等待從 pg_control 檔案讀取。 |
ControlFileSync |
等待 pg_control 檔案到達持久儲存。 |
ControlFileSyncUpdate |
等待 pg_control 檔案更新到達持久儲存。 |
ControlFileWrite |
等待寫入 pg_control 檔案。 |
ControlFileWriteUpdate |
等待寫入更新 pg_control 檔案。 |
CopyFileCopy |
等待檔案複製操作。 |
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 |
在 WAL 傳送器時間線命令期間,等待從時間線歷史檔案讀取。 |
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 |
等待選定的並行雜湊參與者分配雜湊表。 |
HashBatchElect |
等待選定並行雜湊參與者來分配雜湊表。 |
HashBatchLoad |
等待其他並行雜湊參與者完成雜湊表的載入。 |
HashBuildAllocate |
等待選定的並行雜湊參與者分配初始雜湊表。 |
HashBuildElect |
等待選定並行雜湊參與者來分配初始雜湊表。 |
HashBuildHashInner |
等待其他並行雜湊參與者完成內部關係的雜湊計算。 |
HashBuildHashOuter |
等待其他並行雜湊參與者完成外部關係的劃分。 |
HashGrowBatchesDecide |
等待選定並行雜湊參與者來決定未來的批次增長。 |
HashGrowBatchesElect |
等待選定並行雜湊參與者來分配更多批次。 |
HashGrowBatchesFinish |
等待選定的並行雜湊參與者來決定未來的批次增長。 |
HashGrowBatchesReallocate |
等待選定的並行雜湊參與者來分配更多批次。 |
HashGrowBatchesRepartition |
等待其他並行雜湊參與者完成重新劃分。 |
HashGrowBucketsElect |
等待選定並行雜湊參與者來分配更多桶。 |
HashGrowBucketsReallocate |
等待選定的並行雜湊參與者完成分配更多桶。 |
HashGrowBucketsReinsert |
等待其他並行雜湊參與者完成將元組插入新桶。 |
LogicalApplySendData |
等待邏輯複製領導者應用程序將資料傳送到並行應用程序。 |
LogicalParallelApplyStateChange |
等待邏輯複製並行應用程序更改狀態。 |
LogicalSyncData |
等待邏輯複製遠端伺服器傳送資料以進行初始表同步。 |
LogicalSyncStateChange |
等待邏輯複製遠端伺服器更改狀態。 |
MessageQueueInternal |
等待另一個程序連線到共享訊息佇列。 |
MessageQueuePutMessage |
等待將協議訊息寫入共享訊息佇列。 |
MessageQueueReceive |
等待從共享訊息佇列接收位元組。 |
MessageQueueSend |
等待將位元組傳送到共享訊息佇列。 |
MultixactCreation |
等待多事務建立完成。 |
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 |
等待獲取元組的鎖。 |
userlock |
等待獲取使用者鎖。 |
virtualxid |
等待獲取虛擬事務 ID 鎖;請參閱 67.1 事務和識別符號。 |
表 27.12. 型別為 Lwlock
的等待事件
LWLock 等待事件 |
描述 |
---|---|
AddinShmemInit |
等待管理擴充套件在共享記憶體中的空間分配。 |
AioUringCompletion |
透過 io_uring 等待另一個程序完成 IO。 |
AioWorkerSubmissionQueue |
等待訪問 AIO 工作程序提交佇列。 |
AutoFile |
等待更新 postgresql.auto.conf 檔案。 |
Autovacuum |
等待讀取或更新自動 vacuum 工作程序的當前狀態。 |
AutovacuumSchedule |
等待確保已選擇要進行自動 vacuum 的表仍然需要 vacuum。 |
BackgroundWorker |
等待讀取或更新後臺工作程序狀態。 |
BtreeVacuum |
等待讀取或更新 B-tree 索引的 vacuum 相關資訊。 |
BufferContent |
等待訪問記憶體中的資料頁面。 |
BufferMapping |
等待將資料塊與緩衝區池中的緩衝區關聯。 |
CheckpointerComm |
等待管理 fsync 請求。 |
CommitTs |
等待讀取或更新事務提交時間戳設定的最後一個值。 |
CommitTsBuffer |
等待提交時間戳 SLRU 緩衝區的 I/O。 |
CommitTsSLRU |
等待訪問提交時間戳 SLRU 快取。 |
ControlFile |
等待讀取或更新 pg_control 檔案或建立新的 WAL 檔案。 |
DSMRegistry |
等待讀取或更新動態共享記憶體登錄檔。 |
DSMRegistryDSA |
等待訪問動態共享記憶體登錄檔的動態共享記憶體分配器。 |
DSMRegistryHash |
等待訪問動態共享記憶體登錄檔的共享雜湊表。 |
DynamicSharedMemoryControl |
等待讀取或更新動態共享記憶體分配資訊。 |
InjectionPoint |
等待讀取或更新與注入點相關的資訊。 |
LockFastPath |
等待讀取或更新程序的快速路徑鎖定資訊。 |
LockManager |
等待讀取或更新“重量級”鎖的資訊。 |
LogicalRepLauncherDSA |
等待訪問邏輯複製啟動器的動態共享記憶體分配器。 |
LogicalRepLauncherHash |
等待訪問邏輯複製啟動器的共享雜湊表。 |
LogicalRepWorker |
等待讀取或更新邏輯複製工作程序的狀態。 |
MultiXactGen |
等待讀取或更新共享多事務狀態。 |
MultiXactMemberBuffer |
等待多事務成員 SLRU 緩衝區的 I/O。 |
MultiXactMemberSLRU |
等待訪問多事務成員 SLRU 快取。 |
MultiXactOffsetBuffer |
等待多事務偏移量 SLRU 緩衝區的 I/O。 |
MultiXactOffsetSLRU |
等待訪問多事務偏移量 SLRU 快取。 |
MultiXactTruncation |
等待讀取或截斷多事務資訊。 |
NotifyBuffer |
等待 NOTIFY 訊息 SLRU 緩衝區的 I/O。 |
NotifyQueue |
等待讀取或更新 NOTIFY 訊息。 |
NotifyQueueTail |
等待更新 NOTIFY 訊息儲存的限制。 |
NotifySLRU |
等待訪問 NOTIFY 訊息 SLRU 快取。 |
OidGen |
等待分配新的 OID。 |
ParallelAppend |
在並行 Append 計劃執行期間,等待選擇下一個子計劃。 |
ParallelBtreeScan |
等待並行 B-tree 掃描計劃執行期間同步工作程序。 |
ParallelHashJoin |
等待並行雜湊連線計劃執行期間同步工作程序。 |
ParallelQueryDSA |
等待並行查詢動態共享記憶體分配。 |
ParallelVacuumDSA |
等待並行 vacuum 動態共享記憶體分配。 |
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 |
在並行查詢期間,等待訪問共享元組儲存。 |
ShmemIndex |
等待在共享記憶體中查詢或分配空間。 |
SInvalRead |
等待從共享目錄無效佇列中檢索訊息。 |
SInvalWrite |
等待將訊息新增到共享目錄無效佇列。 |
SubtransBuffer |
等待子事務 SLRU 緩衝區的 I/O。 |
SubtransSLRU |
等待訪問子事務 SLRU 快取。 |
SyncRep |
等待讀取或更新同步複製狀態的資訊。 |
SyncScan |
等待選擇同步表掃描的起始位置。 |
TablespaceCreate |
等待建立或刪除表空間。 |
TwoPhaseState |
等待讀取或更新已準備事務的狀態。 |
WaitEventCustom |
等待讀取或更新自定義等待事件資訊。 |
WALBufMapping |
等待替換 WAL 緩衝區中的頁面。 |
WALInsert |
等待將 WAL 資料插入記憶體緩衝區。 |
WALSummarizer |
等待讀取或更新 WAL 摘要狀態。 |
WALWrite |
等待將 WAL 緩衝區寫入磁碟。 |
WrapLimitsVacuum |
等待更新事務 ID 和多事務消耗的限制。 |
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 套接字連線。 |
連線客戶端的主機名,由 |
客戶端用於與此 WAL 傳送器通訊的 TCP 埠號,如果使用 Unix 套接字則為 |
此程序啟動的時間,即客戶端連線到此 WAL 傳送器的時間 |
此備用伺服器的 |
當前的 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 套接字,則為目錄路徑。(路徑情況可以區分,因為它總是絕對路徑,以 |
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 |
訂閱的名稱 |
應用更改時發生錯誤的次數。請注意,任何導致應用錯誤的衝突都會計入 |
在初始表同步期間發生錯誤的次數 |
在應用更改期間,行插入違反 |
在應用更改期間,更新應用於先前已被另一個源修改過的行的次數。有關此衝突的詳細資訊,請參閱 update_origin_differs。 |
在應用更改期間,更新後的行值違反 |
在應用更改期間,要更新的元組未找到的次數。有關此衝突的詳細資訊,請參閱 update_missing。 |
在應用更改期間,刪除操作應用於先前已被另一個源修改過的行的次數。有關此衝突的詳細資訊,請參閱 delete_origin_differs。 |
在應用更改期間,要刪除的元組未找到的次數。有關此衝突的詳細資訊,請參閱 delete_missing。 |
在應用更改期間,行插入或更新行值違反多個 |
最後重置這些統計資訊的時間 |
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 統計資訊。不合理的組合將被省略。
目前,跟蹤了關係(例如表、索引)和 WAL 活動的 I/O。但是,繞過共享緩衝區的關係 I/O(例如,在將表從一個表空間移動到另一個表空間時)目前未被跟蹤。
表 27.23. pg_stat_io
檢視
列 型別 描述 |
---|
後端型別(例如,後臺工作程序、自動 VACUUM 工作程序)。有關 |
I/O 操作的目標物件。可能的值為
|
I/O 操作的上下文。可能的值為
|
讀取操作的數量。 |
讀取操作的總大小(以位元組為單位)。 |
等待讀取操作所花費的時間(毫秒)(如果啟用了 track_io_timing 且 |
寫入操作的數量。 |
寫入操作的總大小(以位元組為單位)。 |
等待寫入操作所花費的時間(毫秒)(如果啟用了 track_io_timing 且 |
程序請求核心寫入永久儲存的 |
等待寫回操作所花費的時間(毫秒)(如果啟用了 track_io_timing,否則為零)。這包括了排隊寫出請求的時間,以及可能花費的寫出髒資料的時間。 |
關係擴充套件操作的數量。 |
關係擴充套件操作的總大小(以位元組為單位)。 |
等待擴充套件操作所花費的時間(毫秒)。(如果啟用了 track_io_timing 且 |
在共享緩衝區中找到所需塊的次數。 |
為了騰出空間供其他用途而將塊寫入共享或本地緩衝區次數。 在 |
在 |
|
等待 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。同樣,後臺寫入器不執行讀取,因此 reads
對於 backend_type
background writer
的行將為 NULL。
對於 object
wal
,fsyncs
和 fsync_time
跟蹤在 issue_xlog_fsync
中完成的 WAL 檔案的 fsync 活動。writes
和 write_time
跟蹤在 XLogWrite
中完成的 WAL 檔案的寫入活動。有關更多資訊,請參閱 第 28.5 節。
pg_stat_io
可用於指導資料庫調優。例如:
跟蹤 I/O 等待時間的列僅在啟用 track_io_timing 時才非零。使用者在引用這些列與其對應的 I/O 操作時應小心,以防 track_io_timing
在自上次統計資訊重置以來的整個時間段內未被啟用。
pg_stat_bgwriter
#檢視 pg_stat_bgwriter
將始終包含一個行,包含關於群集後臺寫入器的資料。
表 27.24. pg_stat_bgwriter
檢視
列 型別 描述 |
---|
後臺寫入器寫入的緩衝區數量 |
後臺寫入器停止清理掃描的次數,因為它寫入了過多的緩衝區 |
分配的緩衝區數量 |
最後重置這些統計資訊的時間 |
pg_stat_checkpointer
#檢視 pg_stat_checkpointer
將始終包含一個行,包含關於群集檢查點程序的資料。
表 27.25. pg_stat_checkpointer
檢視
列 型別 描述 |
---|
由於超時而安排的檢查點數量 |
請求的檢查點數量 |
已執行的檢查點數量 |
由於超時或在嘗試執行失敗後而安排的重啟點數量 |
請求的重啟點數量 |
已執行的重啟點數量 |
在檢查點和重啟點的處理過程中,檔案被寫入磁碟的部分所花費的總時間(毫秒) |
在檢查點和重啟點的處理過程中,檔案被同步到磁碟的部分所花費的總時間(毫秒) |
在檢查點和重啟點期間寫入的共享緩衝區數量 |
在檢查點和重啟點期間寫入的 SLRU 緩衝區數量 |
最後重置這些統計資訊的時間 |
如果伺服器自上次檢查點以來一直處於空閒狀態,則可能會跳過檢查點。 num_timed
和 num_requested
計算已完成和已跳過的檢查點,而 num_done
僅跟蹤已完成的檢查點。同樣,如果最後一個重放的檢查點記錄已經是最後一個重啟點,則可能會跳過重啟點。 restartpoints_timed
和 restartpoints_req
計算已完成和已跳過的重啟點,而 restartpoints_done
僅跟蹤已完成的重啟點。
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 |
此資料庫的名稱 |
此資料庫中因刪除表空間而被取消的查詢數量 |
此資料庫中因鎖超時而被取消的查詢數量 |
此資料庫中因舊快照而被取消的查詢數量 |
此資料庫中因緩衝區固定而被取消的查詢數量 |
此資料庫中因死鎖而被取消的查詢數量 |
此資料庫中因舊快照或主伺服器上的 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 此表的時間(不包括 |
上次此表被 autovacuum 守護程序 VACUUM 的時間 |
上次手動分析此表的時間 |
上次此表被 autovacuum 守護程序分析的時間 |
手動 VACUUM 此表的次數(不包括 |
此表被 autovacuum 守護程序 VACUUM 的次數 |
手動分析此表的次數 |
此表被 autovacuum 守護程序分析的次數 |
手動 VACUUM 此表所花費的總時間(毫秒)(不包括 |
此表被 autovacuum 守護程序 VACUUM 的總時間(毫秒)。(這包括由於成本延遲而進入睡眠的時間。) |
手動分析此表所花費的總時間(毫秒)。(這包括由於成本延遲而進入睡眠的時間。) |
此表被 autovacuum 守護程序分析的總時間(毫秒)。(這包括由於成本延遲而進入睡眠的時間。) |
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
計算的是從表中獲取的活動行。後者如果獲取了任何死行或尚未提交的行,或者如果透過索引掃描避免了任何堆獲取,則會減少。
索引掃描有時可能每次執行執行多次索引搜尋。每次索引搜尋都會增加 pg_stat_all_indexes
.idx_scan
,因此索引掃描的計數可能顯著超過索引掃描執行節點執行的總數。
這可能發生在具有某些SQL構造的查詢中,用於搜尋匹配列表或陣列中任何標量值列表的行(請參閱 第 9.25 節)。對於具有
構造的查詢也可能發生這種情況,但僅當最佳化器將構造轉換為等效的多值陣列表示形式時。類似地,當 B-tree 索引掃描使用跳過掃描最佳化時,每次掃描重新定位到可能具有匹配元組的下一個索引葉頁面時,都會執行一次索引搜尋(請參閱 第 11.3 節)。column_name
= value1
OR column_name
= value2
...
EXPLAIN ANALYZE
輸出每個索引掃描節點執行的總索引搜尋次數。有關演示此工作原理的示例,請參閱 第 14.1.2 節。
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
(簡單最近最少使用)快取訪問某些磁碟上的資訊。檢視 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。 |
返回此後端程序當前事務開始的時間。 |
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。