您好,登錄后才能下訂單哦!
本篇文章為大家展示了PostgreSQL邏輯復(fù)制數(shù)據(jù)不一致導(dǎo)致主庫(kù)wal log無(wú)限增大怎么辦,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
PostgreSQL的邏輯復(fù)制對(duì)比物理復(fù)制的好處總結(jié)有以下幾點(diǎn)
1 靈活: 邏輯復(fù)制對(duì)比物理復(fù)制來(lái)說(shuō),可以單表進(jìn)行數(shù)據(jù)的復(fù)制,物理復(fù)制則是不可以的,并且大部分時(shí)間對(duì)于ETL的功能需求來(lái)說(shuō),物理復(fù)制太重了,需要的磁盤,網(wǎng)絡(luò),等資源都相對(duì)于邏輯復(fù)制消耗的要大的多.
2 方便:邏輯復(fù)制相對(duì)于物理復(fù)制,設(shè)置會(huì)更簡(jiǎn)單,可以隨時(shí)終止或者創(chuàng)建,數(shù)據(jù)進(jìn)行同步等等.
3 定制化:邏輯復(fù)制可以設(shè)置復(fù)制的操作,例如只需要進(jìn)行insert 的復(fù)制,或者 update, delete 等操作的復(fù)制,可以做到, 數(shù)據(jù)不和primary端一致,而達(dá)到某些目的.
4 數(shù)據(jù)遷移,PG如果版本不同進(jìn)行升級(jí)的情況下,PG的logical replication 是可以作為一種數(shù)據(jù)遷移的方案,在不同的版本中進(jìn)行數(shù)據(jù)的同步使用的.
邏輯復(fù)制還是使用物理復(fù)制架構(gòu)實(shí)現(xiàn),從上圖可見, 在復(fù)制槽的基礎(chǔ)上添加了pgoutput plugin 將原有的wal 日志轉(zhuǎn)換后發(fā)送, subscription 在接受這些信息,將信息填充到目的地. 為了避免數(shù)據(jù)被重復(fù)的在subscription 上重復(fù)操作,通過(guò)客戶端記錄接受的LSN號(hào)碼,避免重復(fù)接受同樣的數(shù)據(jù),并操作.
另外需要提示的是,很多不能進(jìn)行vacuum的案例中,部分都有復(fù)制槽的出現(xiàn),可能這個(gè)復(fù)制槽一主多用,同時(shí)有數(shù)據(jù)接收端,其中如果有數(shù)據(jù)接收端無(wú)法接受數(shù)據(jù),則與相關(guān)的需要保留的tuples 就不會(huì)被清理,造成 vacuum 無(wú)法回收.
下面我們有一個(gè)復(fù)制槽
然后我們?nèi)藶榈闹圃煲粋€(gè)沖突. 在數(shù)據(jù)復(fù)制的從庫(kù),將數(shù)據(jù)表的人為添加了一條數(shù)據(jù).
在subscription 端查看subscription 的信息
然后我們?cè)趐ublication 端也插入數(shù)據(jù)
直接進(jìn)入到subscription 中查看錯(cuò)誤日志
系統(tǒng)一直在報(bào)錯(cuò)的狀態(tài)中, 由于主庫(kù)和從庫(kù)之間的數(shù)據(jù)操作沖突,導(dǎo)致從主庫(kù)到從庫(kù)的數(shù)據(jù)無(wú)法被操作. 那到底是怎么影響了WAL log
我們繼續(xù)往下看
在主庫(kù)我們將2000條數(shù)據(jù)刪除1900條
在subscription 中我們查看當(dāng)前的數(shù)據(jù),結(jié)果一定是和主庫(kù)已經(jīng)脫離,不會(huì)在繼續(xù)進(jìn)行任何操作,主要的原因也是 邏輯復(fù)制是有順序的,如果任何一個(gè)操作被卡主,則后續(xù)的操作都不會(huì)被完成.
那么后續(xù)主庫(kù)的 latest checkpoint location 的進(jìn)度將停止,無(wú)論你做任何的操作,或者使用checkpoint 命令 也不會(huì)影響
這里如果PG_WAL 無(wú)法進(jìn)行checkpoint 則表明PG的WAL LOG 無(wú)法歸檔,隨著主庫(kù)的操作越來(lái)越多,則WA了的文件也會(huì)越來(lái)越大,無(wú)法進(jìn)行清理.
下面我們?cè)趶膸?kù)中將自行添加的記錄刪除后,在看主庫(kù)的checkpoint location
已經(jīng)變化了.
當(dāng)然如何監(jiān)控replication logical 復(fù)制是否中斷的問(wèn)題
select pid, client_addr, state, sync_state,
pg_wal_lsn_diff(sent_lsn, write_lsn) as write_lag,
pg_wal_lsn_diff(sent_lsn, flush_lsn) as flush_lag,
pg_wal_lsn_diff(sent_lsn, replay_lsn) as replay_lag
from pg_stat_replication;
如果你當(dāng)前有一個(gè)replication 的情況下, 查詢主庫(kù),如果復(fù)制正常,則會(huì)查出你與subscription之間的情況, 如果數(shù)據(jù)不一致,造成復(fù)制停止的情況,則再次查詢就不會(huì)有數(shù)據(jù)顯示了. 所以這也是一個(gè)判斷邏輯復(fù)制是否正常的一個(gè)方式方法.
邏輯復(fù)制停止會(huì)造成主庫(kù)的wal 無(wú)法截?cái)嗟膯?wèn)題,所以如果PG 已經(jīng)使用了邏輯復(fù)制,則必須對(duì)邏輯復(fù)制進(jìn)行監(jiān)控,否則在繁忙的業(yè)務(wù)系統(tǒng)中,邏輯復(fù)制的停止,會(huì)讓你的主庫(kù)的wal 空間出現(xiàn)問(wèn)題,最終導(dǎo)致主庫(kù)磁盤空間耗盡的問(wèn)題.
上述內(nèi)容就是PostgreSQL邏輯復(fù)制數(shù)據(jù)不一致導(dǎo)致主庫(kù)wal log無(wú)限增大怎么辦,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。