時間:2024-02-28 13:28作者:下載吧人氣:25
pg_stat_replication是一個視圖,主要用于監(jiān)控一個基于流的設(shè)置,建議您 注意系統(tǒng)上稱作pg_stat_replication的視圖。(注:當(dāng)前版本為pg 10.0,10.0以下版本,字段名會有差異)此視圖包含以下信息:
d pg_stat_replication
每個字段代碼的含義:
• pid
這代表負(fù)責(zé)流連接的wal_sender進(jìn)程的進(jìn)程ID。如果您在您的操作系統(tǒng)上檢查您進(jìn)程表,您應(yīng)該會找到一個帶有那個號碼的PostgreSQL進(jìn)程。
• usesysid
每個內(nèi)部用戶都有一個獨(dú)一無二的編號。該系統(tǒng)的工作原理很像UNIX。 usesysid 是 (PostgreSQL) 用戶連接到系統(tǒng)的唯一標(biāo)識符。
• usename
(不是用戶名, 注意少了 r)它存儲與用戶相關(guān)的 usesysid 的名字。這是客戶端放入到連接字符串中的東西。
• application_name
這是同步復(fù)制的通常設(shè)置。它可以通過連接字符串傳遞到master。
• client_addr
它會告訴您流連接從何而來。它擁有客戶端的IP地址。
• client_hostname
除了客戶端的IP,您還可以這樣做,通過它的主機(jī)名來標(biāo)識客戶端。您可以通過master上的postgresql.conf中的log_hostname啟用DNS反向查找。
• client_port
這是客戶端用來和WALsender進(jìn)行通信使用的TPC端口號。 如果不本地UNIX套接字被使用了將顯示-1。
• backend_start
它告訴我們slave什么時間創(chuàng)建了流連接。
• state
此列告訴我們數(shù)據(jù)的連接狀態(tài)。如果事情按計(jì)劃進(jìn)行,它應(yīng)該包含流信息。
• sent_lsn
這代表發(fā)送到連接的最后的事務(wù)日志的位置。
• write_lsn
這是寫到standby系統(tǒng)磁盤上最后的事務(wù)日志位置。
• flush_lsn
這是被刷新到standby系統(tǒng)的最后位置。(這里注意寫和刷新之間的區(qū)別。寫并不意味著刷新 。)
• replay_lsn
這是slave上重放的最后的事務(wù)日志位置。
• sync_priority
這個字段是唯一和同步復(fù)制相關(guān)的。每次同步復(fù)制將會選擇一個優(yōu)先權(quán) —sync_priority—會告訴您選擇了那個優(yōu)先權(quán)。
• sync_state
最后您會看到slave在哪個狀態(tài)。這個狀態(tài)可以是
async, sync, or potential。當(dāng)有一個帶有較高優(yōu)先權(quán)的同步slave時,PostgreSQL會把slave 標(biāo)記為 potential。
在這個系統(tǒng)視圖中每個記錄只代表一個slave。因此,可以看到誰處于連接狀態(tài),在做什么任務(wù)。pg_stat_replication也是檢查slave是否處于連接狀態(tài)的一個好方法。
上面說到pid代表負(fù)責(zé)流連接的wal_sender進(jìn)程的進(jìn)程ID,我們在機(jī)器上通過ps命令查看該進(jìn)程的狀態(tài):
ps -aux|grep 8225
在Linux上我們可以看到那個進(jìn)程不僅有自己的作用 (在這種情況下, wal_sender),而且還帶有終端用戶的名字以及相關(guān)的網(wǎng)絡(luò)連接信息。在上圖中我們可以看到已經(jīng)有人從192.168.47.127(對應(yīng)pg_stat_replication的client_addr字段)通過51519(對應(yīng)pg_stat_replication的client_port字段))端口連接到了master。
bonus:
上面我們提到replay_lsn
是slave上重放的最后的事務(wù)日志位置。
pg_current_wal_lsn()函數(shù)的作用是獲取當(dāng)前的wal log的寫位置。
pg_wal_lsn_diff()函數(shù)的作用是計(jì)算兩個wal日志之間的差距。
所以我們可以通過下面的方法獲取高可用架構(gòu)下從庫的復(fù)制延遲情況:
SELECT
pg_wal_lsn_diff(A .c1, replay_lsn) /(1024 * 1024) AS slave_latency_MB
FROM
pg_stat_replication,
pg_current_wal_lsn() AS A(c1)
WHERE client_addr=’%s’ and application_name = ‘%s’
ORDER BY
slave_latency_MB
LIMIT 1;
網(wǎng)友評論