支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

27.2. 累積統計系統 #

PostgreSQL累積統計系統支援收集和報告關於伺服器活動的資訊。目前,存取磁碟區塊和個別列中表格和索引的次數都會被計算。每個表格中的列總數,以及每個表格的 vacuum 和 analyze 動作的資訊也會被計算。如果啟用,對使用者定義函數的呼叫以及每個函數中花費的總時間也會被計算。

PostgreSQL 也支援報告關於系統中正在發生的事情的動態資訊,例如其他伺服器程序目前正在執行的確切命令,以及系統中存在的其他連線。此功能獨立於累積統計系統。

27.2.1. 統計資料收集設定 #

由於收集統計資料會增加查詢執行的額外負荷,因此可以將系統設定為收集或不收集資訊。這由通常在 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.2.2. 檢視統計資料 #

有幾個預先定義的檢視表,列於表 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_tablespg_stat_xact_sys_tablespg_stat_xact_user_tablespg_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 INDEXREINDEX 的後端程序各有一列,顯示目前的進度。請參閱第 27.4.4 節
pg_stat_progress_vacuum 每個執行 VACUUM 的後端程序 (包括 autovacuum 工作程序) 各有一列,顯示目前的進度。請參閱第 27.4.5 節
pg_stat_progress_cluster 每個執行 CLUSTERVACUUM 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_iopg_statio_ 這組檢視表對於確定緩衝區快取的有效性非常有用。它們可用於計算快取命中率。請注意,雖然 PostgreSQL 的 I/O 統計資訊捕捉了大多數為了執行 I/O 而調用核心的情況,但它們無法區分必須從磁碟提取的資料和已經存在於核心頁面快取中的資料。建議使用者將 PostgreSQL 統計資訊檢視表與作業系統工具結合使用,以更完整地了解資料庫的 I/O 效能。

27.2.3. pg_stat_activity #

pg_stat_activity 檢視表每個伺服器程序都有一列,顯示與該程序目前活動相關的資訊。

表格 27.3. pg_stat_activity 檢視表

欄位 類型

描述

datid oid

此後端連接的資料庫的 OID

datname name

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

pid integer

此後端的程序 ID

leader_pid integer

如果此程序是並行查詢工作程序,則為並行群組領導者的程序 ID;如果此程序是並行套用工作程序,則為領導套用工作程序的程序 ID。NULL 表示此程序是並行群組領導者或領導套用工作程序,或者不參與任何並行操作。

usesysid oid

登入此後端的使用者的 OID

usename name

登入此後端的使用者的名稱

application_name text

連接到此後端的應用程式的名稱

client_addr inet

連接到此後端的用戶端的 IP 位址。如果此欄位為空,則表示用戶端透過伺服器機器上的 Unix socket 連接,或者這是一個內部程序,例如自動清理。

client_hostname text

已連接用戶端的主機名稱,由 client_addr 的反向 DNS 查找報告。此欄位僅對於 IP 連接才不為空,並且僅在啟用 log_hostname 時才不為空。

client_port integer

用戶端用於與此後端通訊的 TCP 埠號,如果使用 Unix socket,則為 -1。如果此欄位為空,則表示這是一個內部伺服器程序。

backend_start timestamp with time zone

此程序啟動的時間。對於用戶端後端,這是用戶端連接到伺服器的時間。

xact_start timestamp with time zone

此程序目前交易開始的時間,如果沒有活動的交易,則為空。如果目前的查詢是其交易的第一個查詢,則此欄位等於 query_start 欄位。

query_start timestamp with time zone

目前活動查詢開始的時間,如果 state 不是 active,則為上次查詢開始的時間

state_change timestamp with time zone

state 上次變更的時間

wait_event_type text

後端正在等待的事件類型(如果有的話);否則為 NULL。請參閱表格 27.4

wait_event text

如果後端目前正在等待,則為等待事件名稱,否則為 NULL。請參閱表 27.5表 27.13

state text

此後端目前的整體狀態。可能的值為

  • active:後端正在執行查詢。

  • idle:後端正在等待新的客戶端指令。

  • idle in transaction:後端處於交易中,但目前未執行查詢。

  • idle in transaction (aborted):此狀態與 idle in transaction 類似,但交易中的其中一個陳述式導致錯誤。

  • fastpath function call:後端正在執行快速路徑函式。

  • disabled:如果在此後端中停用了 track_activities,則會報告此狀態。

backend_xid xid

此後端的頂層交易識別碼(如果有的話);請參閱第 66.1 節

backend_xmin xid

目前後端的 xmin horizon。

query_id bigint

此後端最近查詢的識別碼。如果 stateactive,則此欄位會顯示目前正在執行的查詢的識別碼。在所有其他狀態下,它會顯示上次執行的查詢的識別碼。預設情況下,不會計算查詢識別碼,因此除非啟用 compute_query_id 參數,或配置了計算查詢識別碼的協力廠商模組,否則此欄位將為 null。

query text

此後端最近查詢的文字。如果 stateactive,則此欄位會顯示目前正在執行的查詢。在所有其他狀態下,它會顯示上次執行的查詢。預設情況下,查詢文字會在 1024 位元組處截斷;可以使用參數 track_activity_query_size 變更此值。

backend_type text

目前後端的類型。可能的類型為 autovacuum launcherautovacuum workerlogical replication launcherlogical replication workerparallel workerbackground writerclient backendcheckpointerarchiverstandalone backendstartupwalreceiverwalsenderwalwriterwalsummarizer。此外,擴充功能註冊的背景工作進程可能有其他類型。


注意

wait_eventstate 欄位是獨立的。如果後端處於 active 狀態,則它可能正在或可能沒有 waiting 某些事件。如果狀態為 activewait_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.datfrozenxidpg_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

注意

擴充功能可以將 ExtensionInjectionPointLWLock 事件新增至 表 27.8表 27.12 中顯示的清單。在某些情況下,擴充功能所指定的 LWLock 名稱可能無法在所有伺服器進程中使用。它可能僅報告為 extension,而不是擴充功能指定的名稱。

27.2.4. pg_stat_replication #

pg_stat_replication 檢視表將包含每個 WAL 發送者進程的一列,顯示關於複製到該發送者所連線的待命伺服器的統計資料。僅列出直接連線的待命伺服器;沒有關於下游待命伺服器的資訊。

表 27.14. pg_stat_replication 檢視表

欄位 類型

描述

pid integer

WAL 發送者進程的進程 ID

usesysid oid

登入此 WAL 發送者進程的使用者的 OID

usename name

登入此 WAL 發送者進程的使用者的名稱

application_name text

連線到此 WAL 發送者的應用程式的名稱

client_addr inet

連線到此 WAL 發送者的客戶端的 IP 位址。如果此欄位為 null,表示客戶端透過伺服器機器上的 Unix socket 連線。

client_hostname text

已連接用戶端的主機名稱,由 client_addr 的反向 DNS 查找報告。此欄位僅對於 IP 連接才不為空,並且僅在啟用 log_hostname 時才不為空。

client_port integer

客戶端用於與此 WAL 發送者通訊的 TCP 連接埠號碼,如果使用 Unix socket 則為 -1

backend_start timestamp with time zone

此進程啟動的時間,也就是客戶端連線到此 WAL 發送者的時間

backend_xmin xid

此待命伺服器由 hot_standby_feedback 報告的 xmin 水平線。

state text

目前 WAL 發送者狀態。可能的值為

  • startup:此 WAL 發送者正在啟動。

  • catchup:此 WAL 發送者所連線的待命伺服器正在趕上主伺服器。

  • streaming:此 WAL 發送者在所連線的待命伺服器趕上主伺服器之後,正在串流變更。

  • backup:此 WAL 發送者正在傳送備份。

  • stopping:此 WAL 發送者正在停止。

sent_lsn pg_lsn

在此連線上傳送的最後一個預寫日誌位置

write_lsn pg_lsn

此待命伺服器寫入磁碟的最後一個預寫日誌位置

flush_lsn pg_lsn

此待命伺服器刷新到磁碟的最後一個預寫日誌位置

replay_lsn pg_lsn

在此待命伺服器上重新播放到資料庫的最後一個預寫日誌位置

write_lag interval

在本地刷新最近的 WAL 和接收到此待命伺服器已寫入它(但尚未刷新或套用它)的通知之間經過的時間。如果此伺服器配置為同步待命伺服器,則此可用於衡量在提交時 synchronous_commit 層級 remote_write 所產生的延遲。

flush_lag interval

在本地刷新最近的 WAL 和接收到此待命伺服器已寫入並刷新它(但尚未套用它)的通知之間經過的時間。如果此伺服器配置為同步待命伺服器,則此可用於衡量在提交時 synchronous_commit 層級 on 所產生的延遲。

replay_lag interval

在本地刷新最近的 WAL 和接收到此待命伺服器已寫入、刷新並套用它的通知之間經過的時間。如果此伺服器配置為同步待命伺服器,則此可用於衡量在提交時 synchronous_commit 層級 remote_apply 所產生的延遲。

sync_priority integer

在基於優先順序的同步複製中,此待命伺服器被選為同步待命伺服器的優先順序。這在基於仲裁的同步複製中無效。

sync_state text

此待命伺服器的同步狀態。可能的值為

  • async:此待命伺服器是非同步的。

  • potential:此待命伺服器現在是非同步的,但如果目前的同步伺服器之一失敗,則可能成為同步的。

  • sync:此待命伺服器是同步的。

  • quorum:此待命伺服器被視為仲裁待命伺服器的候選者。

reply_time timestamp with time zone

從待命伺服器接收的最後一個回覆訊息的傳送時間


pg_stat_replication 檢視表中報告的延遲時間是測量最近的 WAL 被寫入、刷新和重新播放,以及發送者知道它的時間。這些時間表示如果遠端伺服器配置為同步待命伺服器,則每個同步提交層級引入的(或可能已經引入的)提交延遲。對於非同步待命伺服器,replay_lag 欄位近似於最近的交易對查詢可見之前的延遲。如果待命伺服器已完全趕上發送伺服器並且沒有更多的 WAL 活動,則最近測量的延遲時間將繼續顯示一小段時間,然後顯示 NULL。

延遲時間自動適用於實體複製。邏輯解碼外掛程式可以選擇性地發出追蹤訊息;如果它們不這樣做,追蹤機制將簡單地顯示 NULL 延遲。

注意

回報的延遲時間並非假設以目前的重播速率,備用伺服器趕上傳送伺服器所需時間的預測。 這樣一個系統會在產生新的 WAL 時顯示類似的時間,但在傳送端閒置時會有所不同。 特別是,當備用伺服器完全趕上時,pg_stat_replication 顯示的是寫入、刷新和重播最新回報 WAL 位置所花費的時間,而不是某些使用者可能預期的零。 這與衡量最近寫入交易的同步提交和交易可見性延遲的目標一致。 為了減少使用者對不同延遲模型的混淆,延遲欄位在完全重播的閒置系統上短時間後會恢復為 NULL。 監控系統應選擇將其表示為遺失資料、零或繼續顯示最後已知的數值。

27.2.5. pg_stat_replication_slots #

pg_stat_replication_slots 檢視會包含每個邏輯複製槽的一列,顯示其使用情況的統計資訊。

表格 27.15. pg_stat_replication_slots 檢視

欄位 類型

描述

slot_name text

複製槽的唯一叢集範圍識別符

spill_txns bigint

一旦邏輯解碼用於解碼 WAL 變更的記憶體超過 logical_decoding_work_mem,溢寫到磁碟的交易數。 此計數器會針對頂層交易和子交易遞增。

spill_count bigint

在此槽解碼 WAL 變更時,交易溢寫到磁碟的次數。 每次交易溢寫時,此計數器都會遞增,且同一交易可能會溢寫多次。

spill_bytes bigint

在此槽執行 WAL 變更解碼時,溢寫到磁碟的解碼交易資料量。 此計數器和其他溢寫計數器可用於衡量邏輯解碼期間發生的 I/O,並允許調整 logical_decoding_work_mem

stream_txns bigint

在此槽的邏輯解碼用於解碼 WAL 變更的記憶體超過 logical_decoding_work_mem 後,串流到解碼輸出外掛程式的進行中交易數量。 串流僅適用於頂層交易(子交易無法獨立串流),因此不會針對子交易遞增計數器。

stream_countbigint

在此槽解碼 WAL 變更時,進行中交易串流到解碼輸出外掛程式的次數。 每次交易串流時,此計數器都會遞增,且同一交易可能會串流多次。

stream_bytesbigint

在此槽解碼 WAL 變更時,解碼用於將進行中交易串流到解碼輸出外掛程式的交易資料量。 此計數器和此槽的其他串流計數器可用於調整 logical_decoding_work_mem

total_txns bigint

傳送到此槽的解碼輸出外掛程式的解碼交易數量。 這僅計算頂層交易,不會針對子交易遞增。 請注意,這包括串流和/或溢寫的交易。

total_bytesbigint

在此槽解碼 WAL 變更時,解碼用於將交易傳送到解碼輸出外掛程式的交易資料量。 請注意,這包括串流和/或溢寫的資料。

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.6. pg_stat_wal_receiver #

pg_stat_wal_receiver 檢視將僅包含一列,顯示來自該接收器所連線伺服器的 WAL 接收器的統計資訊。

表格 27.16. pg_stat_wal_receiver 檢視

欄位 類型

描述

pid integer

WAL 接收器程序的程序 ID

status text

WAL 接收器程序的活動狀態

receive_start_lsn pg_lsn

WAL 接收器啟動時使用的第一個預寫日誌位置

receive_start_tli integer

WAL 接收器啟動時使用的第一個時間軸編號

written_lsn pg_lsn

已接收並寫入磁碟但未刷新的最後預寫日誌位置。 這不應用於資料完整性檢查。

flushed_lsn pg_lsn

已接收並刷新到磁碟的最後預寫日誌位置,此欄位的初始值是 WAL 接收器啟動時使用的第一個日誌位置

received_tli integer

已接收並刷新到磁碟的最後預寫日誌位置的時間軸編號,此欄位的初始值是 WAL 接收器啟動時使用的第一個日誌位置的時間軸編號

last_msg_send_time timestamp with time zone

從來源 WAL 傳送器收到的最後一則訊息的傳送時間

last_msg_receipt_time timestamp with time zone

從來源 WAL 傳送器收到的最後一則訊息的接收時間

latest_end_lsn pg_lsn

回報給來源 WAL 傳送器的最後預寫日誌位置

latest_end_time timestamp with time zone

回報給來源 WAL 傳送器的最後預寫日誌位置的時間

slot_name text

此 WAL 接收器使用的複製槽名稱

sender_host text

此 WAL 接收器連線到的 PostgreSQL 執行個體的主機。 這可以是主機名稱、IP 位址,或者如果連線是透過 Unix socket,則可以是目錄路徑。(路徑案例可以區分,因為它始終是絕對路徑,以 / 開頭。)

sender_port integer

此 WAL 接收器連線到的 PostgreSQL 執行個體的連接埠號碼。

conninfo text

此 WAL 接收器使用的連線字串,其中安全敏感欄位已被混淆處理。


27.2.7. pg_stat_recovery_prefetch #

pg_stat_recovery_prefetch 檢視將僅包含一列。 欄位 wal_distanceblock_distanceio_depth 顯示目前值,其他欄位顯示可以使用 pg_stat_reset_shared 函數重設的累積計數器。

表 27.17. pg_stat_recovery_prefetch 檢視表

欄位 類型

描述

stats_reset timestamp with time zone

上次重設這些統計資訊的時間

prefetch bigint

因為不在緩衝池中而被預取的區塊數量

hit bigint

因為已經在緩衝池中而未被預取的區塊數量

skip_init bigint

因為將會被零初始化而未被預取的區塊數量

skip_new bigint

因為還不存在而未被預取的區塊數量

skip_fpw bigint

因為 WAL 中包含完整頁面映像而未被預取的區塊數量

skip_rep bigint

因為最近已經被預取而未被預取的區塊數量

wal_distance int

預取器超前多少位元組

block_distance int

預取器超前多少區塊

io_depth int

已啟動但尚未得知是否完成的預取數量


27.2.8. pg_stat_subscription #

表 27.18. pg_stat_subscription 檢視表

欄位 類型

描述

subid oid

訂閱的 OID

subname name

訂閱的名稱

worker_type text

訂閱工作處理程序的類型。可能的類型為 applyparallel applytable synchronization

pid integer

訂閱工作處理程序的處理程序 ID

leader_pid integer

如果此處理程序是平行套用工作處理程序,則為領導者套用工作處理程序的處理程序 ID;如果此處理程序是領導者套用工作處理程序或資料表同步工作處理程序,則為 NULL

relid oid

工作處理程序正在同步的關係的 OID;領導者套用工作處理程序和平行套用工作處理程序為 NULL

received_lsn pg_lsn

接收到的最後一個預寫式日誌位置,此欄位的初始值為 0;平行套用工作處理程序為 NULL

last_msg_send_time timestamp with time zone

從原始 WAL 傳送器接收到的最後一則訊息的傳送時間;平行套用工作處理程序為 NULL

last_msg_receipt_time timestamp with time zone

從原始 WAL 傳送器接收到的最後一則訊息的接收時間;平行套用工作處理程序為 NULL

latest_end_lsn pg_lsn

報告給原始 WAL 傳送器的最後一個預寫式日誌位置;平行套用工作處理程序為 NULL

latest_end_time timestamp with time zone

報告給原始 WAL 傳送器的最後一個預寫式日誌位置的時間;平行套用工作處理程序為 NULL


27.2.9. pg_stat_subscription_stats #

pg_stat_subscription_stats 檢視表將包含每個訂閱一行。

表 27.19. pg_stat_subscription_stats 檢視表

欄位 類型

描述

subid oid

訂閱的 OID

subname name

訂閱的名稱

apply_error_count bigint

套用變更時發生錯誤的次數

sync_error_count bigint

在初始資料表同步期間發生錯誤的次數

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.10. pg_stat_ssl #

pg_stat_ssl 檢視表將包含每個後端或 WAL 傳送器處理程序一行,顯示此連線的 SSL 使用統計資訊。它可以與 pg_stat_activitypg_stat_replicationpid 欄上聯結,以取得有關連線的更多詳細資訊。

表 27.20. pg_stat_ssl 檢視表

欄位 類型

描述

pid integer

後端或 WAL 傳送器處理程序的處理程序 ID

ssl boolean

如果此連線使用 SSL,則為 True

version text

使用的 SSL 版本,如果此連線未使用 SSL,則為 NULL

cipher text

使用的 SSL 密碼名稱,如果此連線未使用 SSL,則為 NULL

bits integer

使用的加密演算法中的位元數,如果此連線未使用 SSL,則為 NULL

client_dn text

從使用的用戶端憑證取得的辨別名稱 (DN) 欄位,如果未提供任何用戶端憑證,或者此連線未使用 SSL,則為 NULL。如果 DN 欄位長於 NAMEDATALEN(標準組建中為 64 個字元),則會截斷此欄位。

client_serial numeric

用戶端憑證的序號,如果未提供任何用戶端憑證,或者此連線未使用 SSL,則為 NULL。憑證序號和憑證簽發者的組合可唯一識別憑證(除非簽發者錯誤地重複使用序號)。

issuer_dn text

用戶端憑證的簽發者的 DN,如果未提供任何用戶端憑證,或者此連線未使用 SSL,則為 NULL。此欄位會像 client_dn 一樣截斷。


27.2.11. pg_stat_gssapi #

pg_stat_gssapi 檢視表將包含每個後端一行,顯示此連線的 GSSAPI 使用資訊。它可以與 pg_stat_activitypg_stat_replicationpid 欄上聯結,以取得有關連線的更多詳細資訊。

表 27.21. pg_stat_gssapi 檢視表

欄位 類型

描述

pid integer

後端的處理程序 ID

gss_authenticated boolean

如果此連線使用 GSSAPI 驗證,則為 True

principal text

用於驗證此連線的主體,如果未使用 GSSAPI 驗證此連線,則為 NULL。如果主體長於 NAMEDATALEN(標準組建中為 64 個字元),則會截斷此欄位。

encrypted boolean

如果此連線正在使用 GSSAPI 加密,則為 True

credentials_delegated boolean

如果在此連線上委派了 GSSAPI 認證,則為 True。


27.2.12. pg_stat_archiver #

pg_stat_archiver 檢視表將始終具有單行,其中包含有關叢集封存程式處理程序的資料。

表 27.22. pg_stat_archiver 檢視表

欄位 類型

描述

archived_count bigint

已成功封存的 WAL 檔案數量

last_archived_wal text

最近一次成功封存的 WAL 檔案名稱

last_archived_time timestamp with time zone

最近一次成功封存作業的時間

failed_count bigint

封存 WAL 檔案的失敗嘗試次數

last_failed_wal text

最近一次封存失敗作業的 WAL 檔案名稱

last_failed_time timestamp with time zone

最近一次封存失敗作業的時間

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


通常,WAL 檔案會按照從舊到新的順序進行封存,但這並非絕對保證,並且在特殊情況下(例如提升備用伺服器或發生崩潰恢復後)可能不成立。因此,不能安全地假設所有比 last_archived_wal 舊的檔案也都已成功封存。

27.2.13. pg_stat_io #

pg_stat_io 檢視表將包含每個後端類型、目標 I/O 物件和 I/O 環境的組合的一列,顯示叢集範圍的 I/O 統計資訊。不合理的組合將被省略。

目前,追蹤在關係 (例如,表格、索引) 上的 I/O。 但是,繞過共享緩衝區的關係 I/O(例如,將表格從一個表空間移動到另一個表空間時)目前不被追蹤。

表格 27.23. pg_stat_io 檢視表

欄位 類型

描述

backend_type text

後端類型 (例如,背景工作程序、自動清理工作程序)。 有關 backend_type 的更多資訊,請參閱 pg_stat_activity。 有些 backend_type 不會累積 I/O 操作統計資訊,因此不會包含在檢視表中。

object text

I/O 操作的目標物件。 可能的值包括

  • relation:永久關係。

  • temp relation:暫時關係。

context text

I/O 操作的環境。 可能的值包括

  • normal:I/O 操作類型預設或標準的 context。 例如,預設情況下,關係資料會讀取到共享緩衝區並從其中寫出。 因此,關係資料往返共享緩衝區的讀寫操作會在 context normal 中追蹤。

  • vacuum:在清理和分析永久關係時,於共享緩衝區之外執行的 I/O 操作。 暫時表格清理使用與其他暫時表格 I/O 操作相同的本地緩衝池,並在 context normal 中追蹤。

  • bulkread:在共享緩衝區之外完成的某些大型讀取 I/O 操作,例如,大型表格的循序掃描。

  • bulkwrite:在共享緩衝區之外完成的某些大型寫入 I/O 操作,例如 COPY

reads bigint

讀取操作的次數,每次操作的大小在 op_bytes 中指定。

read_time double precision

在讀取操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零)

writes bigint

寫入操作的次數,每次操作的大小在 op_bytes 中指定。

write_time double precision

在寫入操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零)

writebacks bigint

程序請求核心寫入永久儲存的 op_bytes 大小單位數。

writeback_time double precision

在寫回操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零)。 這包括花費在對寫出請求進行排隊的時間,以及可能花費在寫出臟資料的時間。

extends bigint

關係擴展操作的次數,每次操作的大小在 op_bytes 中指定。

extend_time double precision

在擴展操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零)

op_bytes bigint

每個 I/O 讀取、寫入或擴展單位的位元組數。

關係資料的讀取、寫入和擴展以 block_size 為單位完成,該單位來自建置時參數 BLCKSZ,預設值為 8192

hits bigint

在共享緩衝區中找到所需區塊的次數。

evictions bigint

為了使其可用於其他用途,區塊從共享或本地緩衝區寫出的次數。

context normal 中,這會計算從緩衝區中逐出並替換為另一個區塊的次數。 在 contexts bulkwritebulkreadvacuum 中,這會計算從共享緩衝區中逐出以將共享緩衝區添加到單獨的、大小受限的環形緩衝區中以用於大量 I/O 操作的次數。

reuses bigint

在共享緩衝區之外的大小受限的環形緩衝區中,現有緩衝區作為 bulkreadbulkwritevacuum context 中 I/O 操作的一部分被重複使用的次數。

fsyncs bigint

fsync 呼叫的次數。 這些僅在 context normal 中追蹤。

fsync_time double precision

在 fsync 操作中花費的時間,以毫秒為單位 (如果啟用了 track_io_timing,則為非零值,否則為零)

stats_reset timestamp with time zone

上次重設這些統計資訊的時間。


某些後端類型永遠不會對某些 I/O 物件和/或在某些 I/O 環境中執行 I/O 操作。 這些列會從檢視表中省略。 例如,檢查點程序不會對暫時表格進行檢查點,因此不會有 backend_type checkpointerobject temp relation 的列。

此外,某些 I/O 操作永遠不會由某些後端類型或在某些 I/O 物件和/或在某些 I/O 環境中執行。 這些儲存格將為 NULL。 例如,暫時表格不會 fsync,因此 fsyncs 對於 object temp relation 將為 NULL。 此外,背景寫入程序不執行讀取,因此在 backend_type background writer 的列中,reads 將為 NULL。

pg_stat_io 可用於提供資料庫調整的資訊。 例如

  • 較高的 evictions 計數可能表示應增加共享緩衝區。

  • 用戶端後端依賴檢查點程序來確保資料持續保存到永久儲存。 由 client backend 發出的大量 fsyncs 可能表示共享緩衝區或檢查點程序的錯誤設定。 有關設定檢查點程序的更多資訊,請參閱 第 28.5 節

  • 一般來說,客戶端後端應該能夠依賴輔助程序,例如檢查點程序(checkpointer)和背景寫入程序(background writer),盡可能地寫出髒資料。客戶端後端大量寫入可能表示共享緩衝區或檢查點程序的配置錯誤。有關配置檢查點程序的更多資訊,請參閱第 28.5 節

注意

只有在啟用 track_io_timing 時,追蹤 I/O 時間的欄位才會是非零值。使用者應該小心參考這些欄位,並搭配對應的 I/O 操作,以防自上次統計重設以來,track_io_timing 未啟用。

27.2.14. pg_stat_bgwriter #

pg_stat_bgwriter 檢視表永遠只有單一列,包含叢集背景寫入程序的資料。

表 27.24. pg_stat_bgwriter 檢視表

欄位 類型

描述

buffers_clean bigint

背景寫入程序寫入的緩衝區數量

maxwritten_clean bigint

背景寫入程序因寫入過多緩衝區而停止清理掃描的次數

buffers_alloc bigint

已配置的緩衝區數量

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.15. pg_stat_checkpointer #

pg_stat_checkpointer 檢視表永遠只有單一列,包含叢集檢查點程序(checkpointer)的資料。

表 27.25. pg_stat_checkpointer 檢視表

欄位 類型

描述

num_timed bigint

因逾時而排定的檢查點數量。請注意,如果伺服器自上次檢查點以來一直處於閒置狀態,則可能會跳過檢查點,此值會計算已完成和已跳過的檢查點

num_requested bigint

已執行的要求檢查點數量

restartpoints_timed bigint

因逾時或嘗試失敗後排定的重新啟動點數量

restartpoints_req bigint

要求的重新啟動點數量

restartpoints_done bigint

已執行的重新啟動點數量

write_time double precision

處理檢查點和重新啟動點期間,將檔案寫入磁碟所花費的總時間(以毫秒為單位)

sync_time double precision

處理檢查點和重新啟動點期間,將檔案同步到磁碟所花費的總時間(以毫秒為單位)

buffers_written bigint

在檢查點和重新啟動點期間寫入的緩衝區數量

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.16. pg_stat_wal #

pg_stat_wal 檢視表永遠只有單一列,包含叢集 WAL 活動的資料。

表 27.26. pg_stat_wal 檢視表

欄位 類型

描述

wal_records bigint

產生的 WAL 記錄總數

wal_fpi bigint

產生的 WAL 完整頁面映像總數

wal_bytes numeric

產生的 WAL 總量(以位元組為單位)

wal_buffers_full bigint

由於 WAL 緩衝區已滿而將 WAL 資料寫入磁碟的次數

wal_write bigint

通過 XLogWrite 要求將 WAL 緩衝區寫出到磁碟的次數。有關內部 WAL 函數 XLogWrite 的更多資訊,請參閱第 28.5 節

wal_sync bigint

通過 issue_xlog_fsync 要求將 WAL 檔案同步到磁碟的次數(如果 fsynconwal_sync_methodfdatasyncfsyncfsync_writethrough,否則為零)。有關內部 WAL 函數 issue_xlog_fsync 的更多資訊,請參閱第 28.5 節

wal_write_time double precision

通過 XLogWrite 要求將 WAL 緩衝區寫入磁碟所花費的總時間(以毫秒為單位)(如果啟用 track_wal_io_timing,否則為零)。當 wal_sync_methodopen_datasyncopen_sync 時,這包括同步時間。

wal_sync_time double precision

通過 issue_xlog_fsync 要求將 WAL 檔案同步到磁碟所花費的總時間(以毫秒為單位)(如果啟用 track_wal_io_timingfsynconwal_sync_methodfdatasyncfsyncfsync_writethrough,否則為零)。

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.17. pg_stat_database #

pg_stat_database 檢視表將包含叢集中每個資料庫的一列,加上共用物件的一列,顯示資料庫範圍的統計資訊。

表 27.27. pg_stat_database 檢視表

欄位 類型

描述

datid oid

此資料庫的 OID,如果是屬於共用關係的物件則為 0

datname name

此資料庫的名稱,如果是共用物件則為 NULL

numbackends integer

目前連線到此資料庫的後端數量,如果是共用物件則為 NULL。這是此檢視表中唯一返回反映目前狀態的值的欄位;所有其他欄位都返回自上次重設以來累積的值。

xact_commit bigint

此資料庫中已提交的交易數量

xact_rollback bigint

此資料庫中已回滾的交易數量

blks_read bigint

在此資料庫中讀取的磁碟區塊數量

blks_hit bigint

已在緩衝區快取中找到磁碟區塊的次數,因此不需要讀取(這僅包括 PostgreSQL 緩衝區快取中的命中,不包括作業系統的檔案系統快取)

tup_returned bigint

在此資料庫中,循序掃描提取的活動資料列數量,以及索引掃描返回的索引條目數量

tup_fetched bigint

在此資料庫中,索引掃描提取的活動資料列數量

tup_inserted bigint

在此資料庫中,查詢插入的資料列數量

tup_updated bigint

在此資料庫中,查詢更新的資料列數量

tup_deleted bigint

在此資料庫中,查詢刪除的資料列數量

conflicts bigint

由於與此資料庫中的恢復發生衝突而取消的查詢數量。(衝突僅發生在備用伺服器上;有關詳細資訊,請參閱pg_stat_database_conflicts。)

temp_files bigint

此資料庫中查詢建立的暫存檔案數量。無論暫存檔案的建立原因(例如,排序或雜湊),以及無論 log_temp_files 設定如何,都會計算所有暫存檔案。

temp_bytes bigint

此資料庫中查詢寫入暫存檔案的資料總量。無論暫存檔案的建立原因,以及無論 log_temp_files 設定如何,都會計算所有暫存檔案。

deadlocks bigint

在此資料庫中偵測到的死鎖數量

checksum_failures bigint

在此資料庫(或共享物件上)偵測到的資料頁面校驗和失敗次數,如果未啟用資料校驗和,則為 NULL。

checksum_last_failure timestamp with time zone

在此資料庫(或共享物件上)偵測到上次資料頁面校驗和失敗的時間,如果未啟用資料校驗和,則為 NULL。

blk_read_time double precision

此資料庫中後端讀取資料檔案區塊所花費的時間,以毫秒為單位(如果啟用 track_io_timing,否則為零)

blk_write_time double precision

此資料庫中後端寫入資料檔案區塊所花費的時間,以毫秒為單位(如果啟用 track_io_timing,否則為零)

session_time double precision

資料庫連線在此資料庫中花費的時間,以毫秒為單位(請注意,只有在連線狀態變更時才會更新統計資訊,因此如果連線閒置了很長時間,則不會包含此閒置時間)

active_time double precision

在此資料庫中執行 SQL 陳述式所花費的時間,以毫秒為單位(這對應於 pg_stat_activity 中的 activefastpath function call 狀態)

idle_in_transaction_time double precision

在此資料庫中處於交易中時閒置所花費的時間,以毫秒為單位(這對應於 pg_stat_activity 中的 idle in transactionidle in transaction (aborted) 狀態)

sessions bigint

已建立到此資料庫的連線總數

sessions_abandoned bigint

由於與用戶端的連線遺失而終止的此資料庫連線數

sessions_fatal bigint

由於嚴重錯誤而終止的此資料庫連線數

sessions_killed bigint

由於操作員介入而終止的此資料庫連線數

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.18. pg_stat_database_conflicts #

pg_stat_database_conflicts 檢視表將包含每個資料庫一行,顯示由於與待命伺服器上的復原發生衝突而導致查詢取消的資料庫範圍統計資訊。此檢視表僅包含待命伺服器上的資訊,因為衝突不會發生在主要伺服器上。

表格 27.28. pg_stat_database_conflicts 檢視表

欄位 類型

描述

datid oid

資料庫的 OID

datname name

此資料庫的名稱

confl_tablespace bigint

由於 tablespace 已卸除而取消的此資料庫中的查詢數量

confl_lock bigint

由於鎖定逾時而取消的此資料庫中的查詢數量

confl_snapshot bigint

由於舊快照而取消的此資料庫中的查詢數量

confl_bufferpin bigint

由於釘選的緩衝區而取消的此資料庫中的查詢數量

confl_deadlock bigint

由於死鎖而取消的此資料庫中的查詢數量

confl_active_logicalslot bigint

由於舊快照或主要伺服器上的 wal_level 過低而取消的此資料庫中邏輯槽的使用次數


27.2.19. pg_stat_all_tables #

pg_stat_all_tables 檢視表將包含目前資料庫中每個表格(包括 TOAST 表格)的一行,顯示關於存取該特定表格的統計資訊。pg_stat_user_tablespg_stat_sys_tables 檢視表包含相同的資訊,但會篩選為僅顯示使用者表格和系統表格。

表格 27.29. pg_stat_all_tables 檢視表

欄位 類型

描述

relid oid

表格的 OID

schemaname name

此表格所在的結構描述名稱

relname name

此表格的名稱

seq_scan bigint

在此表格上啟動的循序掃描次數

last_seq_scan timestamp with time zone

基於最近的交易停止時間,此表格上一次循序掃描的時間

seq_tup_read bigint

循序掃描提取的有效列數

idx_scan bigint

在此表格上啟動的索引掃描次數

last_idx_scan timestamp with time zone

基於最近的交易停止時間,此表格上一次索引掃描的時間

idx_tup_fetch bigint

索引掃描提取的有效列數

n_tup_ins bigint

插入的列總數

n_tup_upd bigint

更新的列總數。(這包括 n_tup_hot_updn_tup_newpage_upd 中計數的列更新,以及剩餘的非HOT更新。)

n_tup_del bigint

刪除的列總數

n_tup_hot_upd bigint

HOT 更新的列數。這些更新是指索引中不需要後續版本的更新。

n_tup_newpage_upd bigint

更新的列數,其中後續版本進入新的堆積頁面,留下具有指向不同堆積頁面的 t_ctid 欄位的原始版本。這些始終是非HOTHOT

n_live_tup bigint

有效列的估計數量

n_dead_tup bigint

已刪除列的估計數量

n_mod_since_analyze bigint

自上次分析此表格以來修改的列的估計數量

n_ins_since_vacuum bigint

自上次 vacuum 此表以來,估計插入的列數

last_vacuum timestamp with time zone

上次手動 vacuum 此表的時間 (不包含 VACUUM FULL)

last_autovacuum timestamp with time zone

上次自動 vacuum 常駐程式 vacuum 此表的時間

last_analyze timestamp with time zone

上次手動 analyzed 此表的時間

last_autoanalyze timestamp with time zone

上次自動 vacuum 常駐程式 analyzed 此表的時間

vacuum_count bigint

手動 vacuum 此表的次數 (不包含 VACUUM FULL)

autovacuum_count bigint

自動 vacuum 常駐程式 vacuum 此表的次數

analyze_count bigint

手動 analyzed 此表的次數

autoanalyze_count bigint

自動 vacuum 常駐程式 analyzed 此表的次數


27.2.20. pg_stat_all_indexes #

pg_stat_all_indexes 視窗將會包含目前資料庫中每個索引的一列,顯示關於該特定索引存取的統計資訊。pg_stat_user_indexespg_stat_sys_indexes 視窗包含相同的資訊,但經過篩選,僅分別顯示使用者和系統索引。

表 27.30. pg_stat_all_indexes 視窗

欄位 類型

描述

relid oid

此索引之表格的 OID

indexrelid oid

此索引的 OID

schemaname name

此索引所在的結構描述名稱

relname name

此索引之表格的名稱

indexrelname name

此索引的名稱

idx_scan bigint

在此索引上啟動的索引掃描次數

last_idx_scan timestamp with time zone

根據最新的事務停止時間,上次在此索引上掃描的時間

idx_tup_read bigint

在此索引上掃描傳回的索引條目數量

idx_tup_fetch bigint

透過使用此索引的簡單索引掃描所提取的即時表格列數


索引可由簡單索引掃描、「點陣圖」索引掃描和最佳化工具使用。在點陣圖掃描中,多個索引的輸出可以透過 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_readidx_tup_fetch 計數也可能不同,因為 idx_tup_read 會計算從索引擷取的索引條目,而 idx_tup_fetch 會計算從表格擷取的即時列。 如果使用索引提取任何已死或尚未提交的列,或者如果透過僅索引掃描避免任何堆積提取,則後者將會較少。

注意

使用特定SQL結構來搜尋符合多個純量值的清單或陣列中任何值的列的查詢(請參閱第 9.25 節)在查詢執行期間執行多個「原始」索引掃描(每個純量值最多一個原始掃描)。 每個內部原始索引掃描都會遞增 pg_stat_all_indexes.idx_scan,因此索引掃描的計數可能會顯著超過索引掃描執行器節點執行的總數。

27.2.21. pg_statio_all_tables #

pg_statio_all_tables 視窗將會包含目前資料庫中每個表格(包括 TOAST 表格)的一列,顯示關於該特定表格 I/O 的統計資訊。pg_statio_user_tablespg_statio_sys_tables 視窗包含相同的資訊,但經過篩選,僅分別顯示使用者和系統表格。

表 27.31. pg_statio_all_tables 視窗

欄位 類型

描述

relid oid

表格的 OID

schemaname name

此表格所在的結構描述名稱

relname name

此表格的名稱

heap_blks_read bigint

從此表格讀取的磁碟區塊數量

heap_blks_hit bigint

在此表格中的緩衝區命中數

idx_blks_read bigint

從此表格上的所有索引讀取的磁碟區塊數量

idx_blks_hit bigint

在此表格上的所有索引中的緩衝區命中數

toast_blks_read bigint

從此表格的 TOAST 表格(如果有的話)讀取的磁碟區塊數量

toast_blks_hit bigint

在此表格的 TOAST 表格(如果有的話)中的緩衝區命中數

tidx_blks_read bigint

從此表格的 TOAST 表格索引(如果有的話)讀取的磁碟區塊數量

tidx_blks_hit bigint

在此表格的 TOAST 表格索引(如果有的話)中的緩衝區命中數


27.2.22. pg_statio_all_indexes #

pg_statio_all_indexes 視窗將會包含目前資料庫中每個索引的一列,顯示關於該特定索引 I/O 的統計資訊。pg_statio_user_indexespg_statio_sys_indexes 視窗包含相同的資訊,但經過篩選,僅分別顯示使用者和系統索引。

表 27.32. pg_statio_all_indexes 視窗

欄位 類型

描述

relid oid

此索引之表格的 OID

indexrelid oid

此索引的 OID

schemaname name

此索引所在的結構描述名稱

relname name

此索引之表格的名稱

indexrelname name

此索引的名稱

idx_blks_read bigint

從此索引讀取的磁碟區塊數量

idx_blks_hit bigint

在此索引中的緩衝區命中數


27.2.23. pg_statio_all_sequences #

pg_statio_all_sequences 視窗將會包含目前資料庫中每個序列的一列,顯示關於該特定序列 I/O 的統計資訊。

表 27.33. pg_statio_all_sequences 視窗

欄位 類型

描述

relid oid

序列的 OID

schemaname name

此序列所在的結構描述名稱

relname name

此序列的名稱

blks_read bigint

從這個序列讀取的磁碟區塊數量

blks_hit bigint

這個序列中的緩衝區命中次數


27.2.24. pg_stat_user_functions #

pg_stat_user_functions 視窗會為每個追蹤的函式包含一行,顯示該函式執行的統計資訊。track_functions 參數控制追蹤哪些函式。

表 27.34. pg_stat_user_functions 視窗

欄位 類型

描述

funcid oid

函式的 OID

schemaname name

此函式所在的綱要名稱

funcname name

此函式的名稱

calls bigint

此函式被呼叫的次數

total_time double precision

花在這個函式及其呼叫的所有其他函式中的總時間,以毫秒為單位

self_time double precision

花在這個函式本身的總時間,不包括其呼叫的其他函式,以毫秒為單位


27.2.25. pg_stat_slru #

PostgreSQL 透過 SLRU (simple least-recently-used) 快取來存取某些磁碟上的資訊。pg_stat_slru 視窗會為每個追蹤的 SLRU 快取包含一行,顯示存取快取頁面的統計資訊。

對於核心伺服器中的每個 SLRU 快取,都有一個組態參數控制其大小,並附加 _buffers 後綴。

表 27.35. pg_stat_slru 視窗

欄位 類型

描述

name text

SLRU 的名稱

blks_zeroed bigint

初始化期間歸零的區塊數量

blks_hit bigint

在 SLRU 中已找到磁碟區塊的次數,因此不需要讀取 (這僅包含 SLRU 中的命中,不包括作業系統的檔案系統快取)

blks_read bigint

為此 SLRU 讀取的磁碟區塊數量

blks_written bigint

為此 SLRU 寫入的磁碟區塊數量

blks_exists bigint

為此 SLRU 檢查是否存在的區塊數量

flushes bigint

此 SLRU 髒資料的清除次數

truncates bigint

此 SLRU 的截斷次數

stats_reset timestamp with time zone

上次重設這些統計資訊的時間


27.2.26. 統計函式 #

可以透過編寫查詢來設定檢視統計資訊的其他方式,這些查詢使用與上面顯示的標準視窗相同的底層統計存取函式。 有關函式名稱等詳細資訊,請參閱標準視窗的定義。(例如,在 psql 中,您可以發出 \d+ pg_stat_activity。)每個資料庫統計資訊的存取函式採用資料庫 OID 作為參數,以識別要報告的資料庫。每個資料表和每個索引函式採用資料表或索引 OID。每個函式統計資訊的函式採用函式 OID。請注意,使用這些函式只能看到目前資料庫中的資料表、索引和函式。

與累計統計系統相關的其他函式列於表 27.36

表 27.36. 其他統計函式

函式

描述

pg_backend_pid () → integer

傳回附加到目前會話的伺服器程序的程序 ID。

pg_stat_get_activity ( integer ) → setof record

傳回有關具有指定程序 ID 的後端的資訊記錄,如果指定 NULL,則傳回系統中每個作用中的後端的一條記錄。 傳回的欄位是 pg_stat_activity 視窗中的欄位的子集。

pg_stat_get_snapshot_timestamp () → timestamp with time zone

傳回目前統計資料快照的時間戳記,如果未擷取任何統計資料快照,則傳回 NULL。 如果 stats_fetch_consistency 設定為 snapshot,則會在交易中首次存取累計統計資料時擷取快照

pg_stat_get_xact_blocks_fetched ( oid ) → bigint

傳回在目前交易中,對資料表或索引的區塊讀取請求數量。此數字減去 pg_stat_get_xact_blocks_hit 得出核心 read() 呼叫的次數;由於核心層級的緩衝,實際的物理讀取次數通常較低。

pg_stat_get_xact_blocks_hit ( oid ) → bigint

傳回在目前交易中,對資料表或索引的區塊讀取請求數量,這些請求在快取中找到 (未觸發核心 read() 呼叫)。

pg_stat_clear_snapshot () → void

捨棄目前的統計資料快照或快取的資訊。

pg_stat_reset () → void

將目前資料庫的所有統計計數器重設為零。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。

pg_stat_reset_shared ( [ target text DEFAULT NULL ] ) → void

根據引數將某些叢集範圍的統計計數器重設為零。 target 可以是

  • archiver:重設 pg_stat_archiver 視窗中顯示的所有計數器。

  • bgwriter:重設 pg_stat_bgwriter 視窗中顯示的所有計數器。

  • checkpointer:重設 pg_stat_checkpointer 視窗中顯示的所有計數器。

  • io:重設 pg_stat_io 視窗中顯示的所有計數器。

  • recovery_prefetch:重設 pg_stat_recovery_prefetch 視窗中顯示的所有計數器。

  • slru:重設 pg_stat_slru 視窗中顯示的所有計數器。

  • wal:重設 pg_stat_wal 視窗中顯示的所有計數器。

  • NULL 或未指定:重設上面列出的視窗中的所有計數器。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。

pg_stat_reset_single_table_counters ( oid ) → void

將目前資料庫或在叢集中所有資料庫之間共用的單個資料表或索引的統計資料重設為零。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。

pg_stat_reset_single_function_counters ( oid ) → void

將目前資料庫中單個函式的統計資料重設為零。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。

pg_stat_reset_slru ( [ target text DEFAULT NULL ] ) → void

將單個 SLRU 快取的統計資料重置為零,或將叢集中所有 SLRU 的統計資料重置為零。如果 targetNULL 或未指定,則會重置 pg_stat_slru 視窗中顯示的所有 SLRU 快取的所有計數器。此引數可以是 commit_timestampmultixact_membermultixact_offsetnotifyserializablesubtransactiontransaction,僅重置該項目的計數器。如果引數為 other(或實際上,任何無法識別的名稱),則會重置所有其他 SLRU 快取的計數器,例如擴充功能定義的快取。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。

pg_stat_reset_replication_slot ( text ) → void

重置由引數定義的複製槽的統計資料。如果引數為 NULL,則重置所有複製槽的統計資料。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。

pg_stat_reset_subscription_stats ( oid ) → void

pg_stat_subscription_stats 視窗中顯示的單個訂閱的統計資料重置為零。如果引數為 NULL,則重置所有訂閱的統計資料。

預設情況下,此函式僅限超級使用者使用,但可以授予其他使用者 EXECUTE 權限來執行該函式。


警告

使用 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. 每個後端的統計函式

函式

描述

pg_stat_get_backend_activity ( integer ) → text

傳回此後端最近查詢的文字。

pg_stat_get_backend_activity_start ( integer ) → timestamp with time zone

傳回後端最近查詢開始的時間。

pg_stat_get_backend_client_addr ( integer ) → inet

傳回連線到此後端的用戶端的 IP 位址。

pg_stat_get_backend_client_port ( integer ) → integer

傳回用戶端用於通訊的 TCP 連接埠號碼。

pg_stat_get_backend_dbid ( integer ) → oid

傳回此後端連線到的資料庫的 OID。

pg_stat_get_backend_idset () → setof integer

傳回目前使用中後端 ID 號碼的集合。

pg_stat_get_backend_pid ( integer ) → integer

傳回此後端的處理程序 ID。

pg_stat_get_backend_start ( integer ) → timestamp with time zone

傳回此處理程序啟動的時間。

pg_stat_get_backend_subxact ( integer ) → record

傳回有關具有指定 ID 的後端的子交易的資訊記錄。傳回的欄位為 subxact_count,它是後端的子交易快取中的子交易數量,而 subxact_overflow 表示後端的子交易快取是否溢位。

pg_stat_get_backend_userid ( integer ) → oid

傳回登入此後端的用戶的 OID。

pg_stat_get_backend_wait_event ( integer ) → text

如果此後端目前正在等待,則傳回等待事件名稱,否則傳回 NULL。請參閱表 27.5表 27.13

pg_stat_get_backend_wait_event_type ( integer ) → text

如果此後端目前正在等待,則傳回等待事件類型名稱,否則傳回 NULL。有關詳細資訊,請參閱表 27.4

pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone

傳回後端目前交易開始的時間。


提交更正

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