使用PG_STAT_REPLICATION监视复制
作者:漢斯·尤爾根·舍爾希(Hans-JürgenSch?nig),從上世紀90年代開始使用PostgreSQL,他是CYBERTEC公司的CEO與技術(shù)帶頭人,CYBERTEC是該領(lǐng)域的市場領(lǐng)導(dǎo)者之一,自2000年以來已為全球無數(shù)客戶提供服務(wù)。他著有圖書《Mastering PostgreSQL 9.6: A comprehensive guide for PostgreSQL 9.6 developers and administrators》和《Mastering PostgreSQL 11,Second Edition》,這兩本英文圖書均已經(jīng)由武漢大學彭煜瑋老師翻譯完成并均已出版,中文書名分別為《由淺入深PostgreSQL》、《精通PostgreSQL 11第二版》
譯者:類延良,任職于瀚高基礎(chǔ)軟件股份有限公司,PostgreSQL數(shù)據(jù)庫技術(shù)愛好者,10g &11g OCM,OGG認證專家。
PostgreSQL復(fù)制(同步和異步復(fù)制)是數(shù)據(jù)庫社區(qū)中最普遍的功能之一。
如今,人們正在構(gòu)建高可用集群或使用復(fù)制來創(chuàng)建只讀副本以分散工作負載。
這里要注意的重要一點是,如果使用復(fù)制,則必須確保正確監(jiān)視集群。
本文的目的是解釋一些基礎(chǔ)知識,以確保PostgreSQL集群保持健康。
pg_stat_replication:檢查當前狀態(tài)
監(jiān)視復(fù)制的最佳方法是使用pg_stat_replication系統(tǒng)視圖,它包含許多重要信息,見下:
test=# \d pg_stat_replication View "pg_catalog.pg_stat_replication" Column | Type | Collation | Nullable | Default -----------------+-------------------------+-----------+----------+--------- pid | integer | | | usesysid | oid | | | usename | name | | | application_name | text | | | client_addr | inet | | | client_hostname | text | | | client_port | integer | | | backend_start | timestamp with time zone| | | backend_xmin | xid | | | state | text | | | sent_lsn | pg_lsn | | | write_lsn | pg_lsn | | | flush_lsn | pg_lsn | | | replay_lsn | pg_lsn | | | write_lag | interval | | | flush_lag | interval | | | replay_lag | interval | | | sync_priority | integer | | | sync_state | text | | | reply_time | timestamp with time zone| | |多年來,此視圖中的列數(shù)已大大增加,但是,讓我們首先討論一些基礎(chǔ)知識。
pg_stat_replication:WAL Sender信息
人們經(jīng)常說 pg_stat_replication視圖是primary端的,這是不對的。該視圖的作用是揭示有關(guān)wal sender進程的信息。換句話說:如果你正在運行級聯(lián)復(fù)制,該視圖意味著在secondary復(fù)制到其他slaves的時候, secondary端的 pg_stat_replication上的也會顯示entries(條目),以下圖來說明該場景:
對于每個WAL Sender進程,你將精確獲得一個entry(條目),重要的是每個server只能看到復(fù)制鏈中的下一個server–一個sending server 永遠不會通過一個slave看到,換句話說:在級聯(lián)復(fù)制中,你不得不詢問每個sending server以獲得復(fù)制的概況。
但是還有更多:人們通常必須確定slave是否最新。這里有很多相關(guān)的事情:
- sent_lsn:已經(jīng)通過網(wǎng)絡(luò)發(fā)送了多少WAL?
- write_lsn:已向操作系統(tǒng)發(fā)送了多少WAL?(尚未flushing)
- flush_lsn:已經(jīng)有多少WAL已flush到磁盤?
- replay_lsn:已重放了多少WAL,因此對查詢可見?
下圖說明了這些字段:
這里要注意的重要一點是PostgreSQL提供了一種特殊的數(shù)據(jù)類型來表示該數(shù)據(jù):pg_lsn
可以輕松地找出當前WAL的位置,下面說明了如何工作:
這里值得注意的是,可以進行計算:
test=# SELECT pg_current_wal_lsn() - '3/B549A845'::pg_lsn; ?column? ----------- 616376827 (1 row)PostgreSQL提供了各種運算符來進行此類計算。換句話說:很容易弄清楚備庫落后了多遠
flush_lsn與replay_lsn
人們一直在問我們flush_lsn和replay_lsn之間可能有什么區(qū)別。好吧,讓我們深入研究一下:當WAL從primary流向slave時,它首先通過網(wǎng)絡(luò)發(fā)送,然后發(fā)送到操作系統(tǒng),最后將事務(wù)刷新到磁盤以確保持久性(即崩潰安全性)。flush_lsn顯然表示刷新到磁盤的最后一個WAL位置。現(xiàn)在的問題是:數(shù)據(jù)刷新后是否立即可見?答案是:不,如我們的較早的博客文章中所述,可能存在復(fù)制沖突。如果發(fā)生復(fù)制沖突,則WAL將會被持久化在slave上,但是只有當沖突被解決之后,WAL才會replay。換句話說,可能存在如下情況:data被存儲在slave上,但是沒有被replay并被最終用戶訪問。
注意這一點很重要,因為復(fù)制沖突比您想象的要經(jīng)常發(fā)生。如果您看到以下消息,則說明您遇到了復(fù)制沖突:
ERROR: canceling statement due to conflict with recovery
DETAIL: User query might have needed to see row versions that must be removed.
Replication lags
有時有必要確定復(fù)制延遲的數(shù)量(以秒為單位),到目前為止,我們已經(jīng)看到了兩個服務(wù)器之間的距離(以字節(jié)為單位)。如果要測量lag,可以查看pg_stat_replication系統(tǒng)視圖的相關(guān)_lag列(譯者注:write_lag、flush_lag、replay_lag),這些列的數(shù)據(jù)類型為“interval”, 因此您可以看到延遲的秒數(shù)或分鐘數(shù),如果復(fù)制工作正常,則延遲通常會非常小(毫秒)。但是,您可能要監(jiān)視它。
提醒您:如果您正在運行諸如VACUUM之類的大規(guī)模導(dǎo)入或其他昂貴的操作,則容易發(fā)生磁盤吞吐量可能會高于網(wǎng)絡(luò)帶寬。在這種情況下,slave可能會落后。您必須忍受這一點,并確保警報不會過早開始。
pgwatch2: Ready made tooling
要監(jiān)視復(fù)制,您可以依靠我剛剛顯示的手動魔術(shù)(manual magic)。但是,那里也有很多現(xiàn)成的工具可以簡化此任務(wù)。我們可以推薦pgwatch2,它可以作為容器免費下載。
如果您想查看演示pgwatch如何工作的演示,請考慮查看我們的pawatch2網(wǎng)站(https://www.cybertec-postgresql.com/en/products/pgwatch/)
Finally …
如果您想全面了解PostgreSQL,建議您閱讀其他一些文章。如果您對存儲感興趣,則可能需要閱讀我們有關(guān)zheap的帖子之一
(https://www.cybertec-postgresql.com/en/zheap-reinvented-postgresql-storage/)
原文鏈接:
https://www.cybertec-postgresql.com/en/monitoring-replication-pg_stat_replication/
了解更多PostgreSQL熱點資訊、新聞動態(tài)、精彩活動,請訪問中國PostgreSQL官方網(wǎng)站
解決更多PostgreSQL相關(guān)知識、技術(shù)、工作問題,請訪問中國PostgreSQL官方問答社區(qū)
下載更多PostgreSQL相關(guān)資料、工具、插件問題,請訪問中國PostgreSQL官方下載網(wǎng)站
總結(jié)
以上是生活随笔為你收集整理的使用PG_STAT_REPLICATION监视复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 7.11 官方下载,an
- 下一篇: 【字节2019春招】万万没有想到之聪明的