W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
邏輯解碼是一種將對(duì)數(shù)據(jù)庫(kù)表的所有持久更改抽取到一種清晰、易于理解的格式 的處理,這種技術(shù)允許在不了解數(shù)據(jù)庫(kù)內(nèi)部狀態(tài)的詳細(xì)知識(shí)的前提下解釋該格式。
在PostgreSQL中,邏輯解碼通過(guò)解碼 預(yù)寫式日志的內(nèi)容來(lái)實(shí)現(xiàn),預(yù)寫式日志描述了存儲(chǔ) 層面上的更改,而邏輯解碼則會(huì)把更改解碼成一種應(yīng)用相關(guān)的形式,例如一個(gè)元組 流或者 SQL 語(yǔ)句流。
在邏輯復(fù)制的環(huán)境下,一個(gè)槽表示一個(gè)更改流,這些更改可以在客戶機(jī)上以它們?cè)谠?wù)器上產(chǎn)生的順序被重播。每一個(gè)流從一個(gè)單一數(shù)據(jù)庫(kù)中流式傳送更改序列。
PostgreSQL也有流復(fù)制槽(見(jiàn)第 26.2.5 節(jié)),但是它們的使用有所不同。
一個(gè)復(fù)制槽在一個(gè)PostgreSQL集簇的所 有數(shù)據(jù)庫(kù)之間具有一個(gè)唯一的標(biāo)識(shí)符。槽在使用它們的連接之間保持獨(dú)立并且 對(duì)于崩潰是安全的。
在常規(guī)操作中,一個(gè)邏輯槽只會(huì)把每次更改發(fā)出一次。 只有在檢查點(diǎn)時(shí)才會(huì)持久化每一個(gè)槽的當(dāng)前位置,因此如果發(fā)生崩潰,槽可能會(huì)回到一個(gè)較早的 LSN,這會(huì)導(dǎo)致服務(wù)器重啟時(shí)再次發(fā)送最近的更改。 邏輯解碼客戶端負(fù)責(zé)避免多次處理同一消息導(dǎo)致的副作用。 客戶端可能會(huì)希望在解碼時(shí)記錄它們看到的最新的 LSN,并且跳過(guò)任何從該 LSN 解碼得到的重復(fù)數(shù)據(jù)或者(使用復(fù)制協(xié)議時(shí)的)請(qǐng)求,而不是讓服務(wù)器來(lái)決定開(kāi)始點(diǎn)。 復(fù)制進(jìn)度跟蹤特性就是為此服務(wù)的,請(qǐng)參考復(fù)制源頭。
對(duì)于同一個(gè)數(shù)據(jù)庫(kù)可能會(huì)存在多個(gè)獨(dú)立的槽。每一個(gè)槽有自己的狀態(tài),允許不 同的消費(fèi)者從該數(shù)據(jù)庫(kù)的更改流中的不同點(diǎn)開(kāi)始接收更改。對(duì)于大多數(shù)應(yīng)用, 每一個(gè)消費(fèi)者都將要求一個(gè)單獨(dú)的槽。
邏輯復(fù)制槽完全不知道接收者的狀態(tài)。甚至可能會(huì)有多個(gè)不同的接收者在不同 時(shí)間使用同一個(gè)槽,它們將只是從上一個(gè)接收者停止消費(fèi)更改的地方開(kāi)始得到 更改。但在任一給定時(shí)刻,只有一個(gè)接收者可以從一個(gè)槽中消費(fèi)更改。
復(fù)制槽可以在崩潰時(shí)保持,并且不知道其消費(fèi)者的狀態(tài)。即便沒(méi)有連接使用它們, 它們也將阻止移除所需的資源。這會(huì)消耗存儲(chǔ),因?yàn)橹灰€有一個(gè)復(fù)制槽需要, WAL 和來(lái)自于系統(tǒng)目錄的行就不能被VACUUM
移除。在極端情況下這會(huì)導(dǎo)致數(shù)據(jù)庫(kù)關(guān)閉以防止事務(wù)ID回卷(見(jiàn)第 24.1.5 節(jié))。因此如果不再需要一個(gè)槽,那就應(yīng)該刪除它。
輸出插件將數(shù)據(jù)從預(yù)寫式日志的內(nèi)部表示轉(zhuǎn)換成復(fù)制槽的消費(fèi)者所需的格式。
當(dāng)使用流復(fù)制接口創(chuàng)建一個(gè)新的復(fù)制槽時(shí)(見(jiàn)CREATE_REPLICATION_SLOT),一個(gè)快照將被導(dǎo)出(見(jiàn) 第 9.27.5 節(jié)),在它所顯示的
數(shù)據(jù)庫(kù)狀態(tài)之后所有的更改都將被包括在更改流中。通過(guò)使用 SET TRANSACTION
SNAPSHOT
讀取槽被創(chuàng)建時(shí)的數(shù)據(jù)庫(kù)狀態(tài),這可以用來(lái)創(chuàng)建 一個(gè)新的復(fù)制。然后這個(gè)事務(wù)可以被用來(lái)及時(shí)轉(zhuǎn)儲(chǔ)那一點(diǎn)的數(shù)據(jù)庫(kù)狀態(tài),它后來(lái) 可以被槽的內(nèi)容更新而不丟失任何更改。
并非總能夠創(chuàng)建快照。特別是在連接到熱備時(shí),快照創(chuàng)建將會(huì)失敗。不要求快照導(dǎo)出的應(yīng)用可以用NOEXPORT_SNAPSHOT
選項(xiàng)來(lái)抑制它。 option.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: