2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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_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.2.2. 檢視統計資訊 #

有幾個預定義的檢視,列在 表 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_tablespg_stat_xact_sys_tablespg_stat_xact_user_tablespg_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 INDEXREINDEX 的後端一行,顯示當前進度。請參閱 27.4.4 CREATE INDEX 進度報告
pg_stat_progress_vacuum 每個正在執行 VACUUM 的後端(包括 autovacuum 工作程序)一行,顯示當前進度。請參閱 27.4.5 VACUUM 進度報告
pg_stat_progress_cluster 每個正在執行 CLUSTERVACUUM 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_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 地址。如果此欄位為 NULL,則表示客戶端透過伺服器上的 Unix 套接字連線,或者這是一個內部程序(例如 autovacuum)。

client_hostname text

連線客戶端的主機名,由 client_addr 的反向 DNS 查詢報告。此欄位僅對 IP 連線非 NULL,並且僅當 log_hostname 啟用時才有效。

client_port integer

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

backend_start timestamp with time zone

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

xact_start timestamp with time zone

此程序當前事務啟動的時間,如果當前沒有活動的事務,則為 NULL。如果當前查詢是其事務中的第一個查詢,則此列等於 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

此後端的當前總體狀態。可能的值為:

  • starting:後端處於初始啟動狀態。在此階段執行客戶端身份驗證。

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

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

  • idle in transaction:後端處於事務中,但當前未執行查詢。

  • idle in transaction (aborted):此狀態類似於 idle in transaction,不同之處在於事務中的一個語句導致了錯誤。

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

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

backend_xid xid

此後端的頂層事務識別符號(如果有);請參閱 67.1 事務和識別符號

backend_xmin xid

當前後端的 xmin 視界。

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 狀態,它可能正在等待某個事件,也可能沒有。如果狀態為 activewait_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.datfrozenxidpg_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

注意

擴充套件可以向 表 27.8表 27.12 中顯示的列表新增 ExtensionInjectionPointLWLock 事件。在某些情況下,擴充套件分配的 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 套接字連線。

client_hostname text

連線客戶端的主機名,由 client_addr 的反向 DNS 查詢報告。此欄位僅對 IP 連線非 NULL,並且僅當 log_hostname 啟用時才有效。

client_port integer

客戶端用於與此 WAL 傳送器通訊的 TCP 埠號,如果使用 Unix 套接字則為 -1

backend_start timestamp with time zone

此程序啟動的時間,即客戶端連線到此 WAL 傳送器的時間

backend_xmin xid

此備用伺服器的 xmin 視界,由 hot_standby_feedback 報告。

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 套接字,則為目錄路徑。(路徑情況可以區分,因為它總是絕對路徑,以 / 開頭。)

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

應用更改時發生錯誤的次數。請注意,任何導致應用錯誤的衝突都會計入 apply_error_count 和相應的衝突計數(例如 confl_*)。

sync_error_count bigint

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

confl_insert_exists bigint

在應用更改期間,行插入違反 NOT DEFERRABLE 唯一約束的次數。有關此衝突的詳細資訊,請參閱 insert_exists

confl_update_origin_differs bigint

在應用更改期間,更新應用於先前已被另一個源修改過的行的次數。有關此衝突的詳細資訊,請參閱 update_origin_differs

confl_update_exists bigint

在應用更改期間,更新後的行值違反 NOT DEFERRABLE 唯一約束的次數。有關此衝突的詳細資訊,請參閱 update_exists

confl_update_missing bigint

在應用更改期間,要更新的元組未找到的次數。有關此衝突的詳細資訊,請參閱 update_missing

confl_delete_origin_differs bigint

在應用更改期間,刪除操作應用於先前已被另一個源修改過的行的次數。有關此衝突的詳細資訊,請參閱 delete_origin_differs

confl_delete_missing bigint

在應用更改期間,要刪除的元組未找到的次數。有關此衝突的詳細資訊,請參閱 delete_missing

confl_multiple_unique_conflicts bigint

在應用更改期間,行插入或更新行值違反多個 NOT DEFERRABLE 唯一約束的次數。有關此衝突的詳細資訊,請參閱 multiple_unique_conflicts

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 統計資訊。不合理的組合將被省略。

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

表 27.23. pg_stat_io 檢視

列 型別

描述

backend_type text

後端型別(例如,後臺工作程序、自動 VACUUM 工作程序)。有關 backend_type 的更多資訊,請參閱 pg_stat_activity。某些 backend_type 不會累積 I/O 操作統計資訊,也不會包含在檢視中。

object text

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

  • relation:永久關係。

  • temp relation:臨時關係。

  • wal:寫前日誌。

context text

I/O 操作的上下文。可能的值為

  • normal:I/O 操作型別的預設或標準 context。例如,預設情況下,關係資料被讀入並從共享緩衝區寫出。因此,關係資料與共享緩衝區的讀寫在 context normal 中被跟蹤。

  • init:在建立 WAL 段期間執行的 I/O 操作在 context init 中被跟蹤。

  • vacuum:在對永久關係執行 VACUUM 和 ANALYZE 時在共享緩衝區外部執行的 I/O 操作。臨時表 VACUUM 使用與任何其他臨時表 I/O 操作相同的本地緩衝區池,並在 context normal 中被跟蹤。

  • bulkread:在共享緩衝區外部執行的某些大型讀取 I/O 操作,例如,順序掃描一個大表。

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

reads bigint

讀取操作的數量。

read_bytes numeric

讀取操作的總大小(以位元組為單位)。

read_time double precision

等待讀取操作所花費的時間(毫秒)(如果啟用了 track_io_timingobject 不是 wal,或者如果啟用了 track_wal_io_timingobjectwal,否則為零)

writes bigint

寫入操作的數量。

write_bytes numeric

寫入操作的總大小(以位元組為單位)。

write_time double precision

等待寫入操作所花費的時間(毫秒)(如果啟用了 track_io_timingobject 不是 wal,或者如果啟用了 track_wal_io_timingobjectwal,否則為零)

writebacks bigint

程序請求核心寫入永久儲存的 BLCKSZ(通常為 8kB)大小的單位數量。

writeback_time double precision

等待寫回操作所花費的時間(毫秒)(如果啟用了 track_io_timing,否則為零)。這包括了排隊寫出請求的時間,以及可能花費的寫出髒資料的時間。

extends bigint

關係擴充套件操作的數量。

extend_bytes numeric

關係擴充套件操作的總大小(以位元組為單位)。

extend_time double precision

等待擴充套件操作所花費的時間(毫秒)。(如果啟用了 track_io_timingobject 不是 wal,或者如果啟用了 track_wal_io_timingobjectwal,否則為零)

hits bigint

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

evictions bigint

為了騰出空間供其他用途而將塊寫入共享或本地緩衝區次數。

context normal 中,這計算了塊從緩衝區中被驅逐並替換為另一個塊的次數。在 context bulkwritebulkreadvacuum 中,這計算了塊從共享緩衝區中被驅逐以將共享緩衝區新增到單獨的、大小受限的環形緩衝區以供批次 I/O 操作使用的次數。

reuses bigint

bulkreadbulkwritevacuum context 中,作為 I/O 操作一部分的、大小受限的環形緩衝區中現有緩衝區的重用次數。

fsyncs bigint

fsync 呼叫次數。這些僅在 context normal 中被跟蹤。

fsync_time double precision

等待 fsync 操作所花費的時間(毫秒)(如果啟用了 track_io_timingobject 不是 wal,或者如果啟用了 track_wal_io_timingobjectwal,否則為零)

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。同樣,後臺寫入器不執行讀取,因此 reads 對於 backend_type background writer 的行將為 NULL。

對於 object walfsyncsfsync_time 跟蹤在 issue_xlog_fsync 中完成的 WAL 檔案的 fsync 活動。writeswrite_time 跟蹤在 XLogWrite 中完成的 WAL 檔案的寫入活動。有關更多資訊,請參閱 第 28.5 節

pg_stat_io 可用於指導資料庫調優。例如:

  • evictions 計數可能表明應增加共享緩衝區。

  • 客戶端後端依賴於檢查點程序來確保資料持久化到永久儲存。客戶端後端的大量 fsyncs 可能表明共享緩衝區或檢查點程序配置不當。有關配置檢查點程序的更多資訊,請參閱 第 28.5 節

  • 通常,客戶端後端應該能夠依賴輔助程序(如檢查點程序和後臺寫入器)來儘可能多地寫出髒資料。客戶端後端的大量寫入可能表明共享緩衝區或檢查點程序配置不當。有關配置檢查點程序的更多資訊,請參閱 第 28.5 節

注意

跟蹤 I/O 等待時間的列僅在啟用 track_io_timing 時才非零。使用者在引用這些列與其對應的 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 將始終包含一個行,包含關於群集檢查點程序的資料。

表 27.25. pg_stat_checkpointer 檢視

列 型別

描述

num_timed bigint

由於超時而安排的檢查點數量

num_requested bigint

請求的檢查點數量

num_done bigint

已執行的檢查點數量

restartpoints_timed bigint

由於超時或在嘗試執行失敗後而安排的重啟點數量

restartpoints_req bigint

請求的重啟點數量

restartpoints_done bigint

已執行的重啟點數量

write_time double precision

在檢查點和重啟點的處理過程中,檔案被寫入磁碟的部分所花費的總時間(毫秒)

sync_time double precision

在檢查點和重啟點的處理過程中,檔案被同步到磁碟的部分所花費的總時間(毫秒)

buffers_written bigint

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

slru_written bigint

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

stats_reset timestamp with time zone

最後重置這些統計資訊的時間


如果伺服器自上次檢查點以來一直處於空閒狀態,則可能會跳過檢查點。 num_timednum_requested 計算已完成和已跳過的檢查點,而 num_done 僅跟蹤已完成的檢查點。同樣,如果最後一個重放的檢查點記錄已經是最後一個重啟點,則可能會跳過重啟點。 restartpoints_timedrestartpoints_req 計算已完成和已跳過的重啟點,而 restartpoints_done 僅跟蹤已完成的重啟點。

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 資料寫入磁碟的次數

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

到此資料庫的資料庫會話因操作員干預而終止的數量

parallel_workers_to_launch bigint

計劃由該資料庫上的查詢啟動的並行工作程序數

parallel_workers_launched 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

此資料庫中因刪除表空間而被取消的查詢數量

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 欄位 指向不同的堆頁。這些始終是非HOT更新。

n_live_tup bigint

估計的活動行數

n_dead_tup bigint

估計的死行數

n_mod_since_analyze bigint

自上次分析此表以來修改的估計行數

n_ins_since_vacuum bigint

自上次 VACUUM 此表以來插入的估計行數(不包括 VACUUM FULL

last_vacuum timestamp with time zone

上次手動 VACUUM 此表的時間(不包括 VACUUM FULL

last_autovacuum timestamp with time zone

上次此表被 autovacuum 守護程序 VACUUM 的時間

last_analyze timestamp with time zone

上次手動分析此表的時間

last_autoanalyze timestamp with time zone

上次此表被 autovacuum 守護程序分析的時間

vacuum_count bigint

手動 VACUUM 此表的次數(不包括 VACUUM FULL

autovacuum_count bigint

此表被 autovacuum 守護程序 VACUUM 的次數

analyze_count bigint

手動分析此表的次數

autoanalyze_count bigint

此表被 autovacuum 守護程序分析的次數

total_vacuum_time double precision

手動 VACUUM 此表所花費的總時間(毫秒)(不包括 VACUUM FULL)。(這包括由於成本延遲而進入睡眠的時間。)

total_autovacuum_time double precision

此表被 autovacuum 守護程序 VACUUM 的總時間(毫秒)。(這包括由於成本延遲而進入睡眠的時間。)

total_analyze_time double precision

手動分析此表所花費的總時間(毫秒)。(這包括由於成本延遲而進入睡眠的時間。)

total_autoanalyze_time double precision

此表被 autovacuum 守護程序分析的總時間(毫秒)。(這包括由於成本延遲而進入睡眠的時間。)


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 計算的是從表中獲取的活動行。後者如果獲取了任何死行或尚未提交的行,或者如果透過索引掃描避免了任何堆獲取,則會減少。

注意

索引掃描有時可能每次執行執行多次索引搜尋。每次索引搜尋都會增加 pg_stat_all_indexes.idx_scan,因此索引掃描的計數可能顯著超過索引掃描執行節點執行的總數。

這可能發生在具有某些SQL構造的查詢中,用於搜尋匹配列表或陣列中任何標量值列表的行(請參閱 第 9.25 節)。對於具有 column_name = value1 OR column_name = value2 ... 構造的查詢也可能發生這種情況,但僅當最佳化器將構造轉換為等效的多值陣列表示形式時。類似地,當 B-tree 索引掃描使用跳過掃描最佳化時,每次掃描重新定位到可能具有匹配元組的下一個索引葉頁面時,都會執行一次索引搜尋(請參閱 第 11.3 節)。

提示

EXPLAIN ANALYZE 輸出每個索引掃描節點執行的總索引搜尋次數。有關演示此工作原理的示例,請參閱 第 14.1.2 節

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簡單最近最少使用)快取訪問某些磁碟上的資訊。檢視 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_backend_io ( integer ) → setof record

返回具有指定程序 ID 的後端的 I/O 統計資訊。輸出欄位與 pg_stat_io 檢視中的欄位完全相同。

該函式不返回檢查點程序、後臺寫入器、啟動程序和 autovacuum 啟動器的 I/O 統計資訊,因為它們已在 pg_stat_io 檢視中可見,並且每種只有一個。

pg_stat_get_activity ( integer ) → setof record

如果指定 NULL,則返回指定程序 ID 的後端的記錄資訊,或者返回系統中每個活動後端的記錄。返回的欄位是 pg_stat_activity 檢視欄位的子集。

pg_stat_get_backend_wal ( integer ) → record

返回指定程序 ID 的後端的 WAL 統計資訊。輸出欄位與 pg_stat_wal 檢視中的欄位完全相同。

該函式不返回檢查點程序、後臺寫入器、啟動程序和 autovacuum 啟動器的 WAL 統計資訊。

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_backend_stats ( integer ) → void

將指定程序 ID 的單個後端程序的統計資訊重置為零。

預設情況下,此函式僅限超級使用者使用,但也可以授予其他使用者 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_timestamp, multixact_member, multixact_offset, notify, serializable, subtransaction, 或 transaction 中的一個,以僅重置該條目的計數器。如果引數為 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_activitypg_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

返回此後端程序當前事務開始的時間。


提交更正

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