postgres數據庫的流復制

1. 流復制和邏輯復制的差異

  • 邏輯復制和流復制最直觀的不同是,邏輯復制支持表級別復制
  • 區分點事原理不同
    • 邏輯日志是在wal日志產生的數據庫上,由邏輯解析模塊對wal日志進行初步的解析,解析結果是ReorderBufferChange(理解為HeapTupleData),再由pgoutput plugin對中間結果進行過濾和消息化拼接,然后將其發送到訂閱端,訂閱端根據接受到的Heap TupleData重新對其執行insert、delete、udpate操作
    • 流復制時將數據從walrecord拷貝到數據頁,
    • 邏輯復制時將數據重新執行一次insert、update或delete

2. 流復制

  • 流復制面對未提交的事務,事務沒有提交也會同步到備機,當主庫進行提交和回滾的時候,也會同步進行提交和回滾。對大事務相對友好
  • 流復制會導致備機也會產生大量死元祖,需要做vacuum
  • 流復制時將wal日志中記錄的內容按照確切的塊地址逐字節的拷貝到備庫,因此主備之間數據分布是一樣的,意味著主備機器上,同一條記錄的ctid是相同的

3. 流復制的實現原理

  • 后端進程通過執行XLogInsert和XLogFlush函數,將wal數據寫入并刷新到WAL段文件中
  • walsender進程將寫入wal段的wal數據發送給walreveiver進程
  • 發送wal數據后,后端進程繼續等待備用服務器的ACK響應。更準確的說,后端進行通過執行內部函數SyncRepWaitForLSN獲得一個latch,并等待他被釋放
  • 備用服務器上的walreveiver將接受到的wal數據寫入備用的wal段中,使用write系統調用,并向walsender返回一次ACK響應
  • walreveiver使用如fsync等系統調用將wal數據刷新到wal段,向walsender返回另一個ACK響應,并通知啟動進程關于wal數據的刷新
  • startup進程回訪已寫入wal段的wal數據
  • 當walsender收到walreveiver的ack響應時,釋放后端進程的latch,然后后端進程的提交或中止操作將完成。latch釋放的時機取決于參數synchronous_commit,如果設置為on,當收到步驟5的ACK時釋放latch,如果設置為remote_wirte,則在收到步驟3的ACK時釋放latch

ACK的包括內容

  • 寫入最新wal數據的lsn位置
  • 刷新最新wal數據的lsn位置
  • 在啟動過程中回放最新wal數據的lsn位置
  • 發送此響應的時間戳

過程分析

  • 主庫的進程進行寫操作
  • 產生WAL record
  • walsender感知到新的wal,發送給備庫
  • 備庫接受,寫盤再回放

是否發送wal日志與主庫事務的提交與否沒有關系,但主庫是否能提交取決于備庫的wal日志寫入位置,默認是on的話需要落盤,備庫實時回放

注意點

  • 流復制就是借助latch實現主從進程間的協作
  • 流復制場景下,只讀事務、子事務的提交以及事務回滾,無需等待備庫的ACK

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39019.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

干貨分享|如何將前端代理服務器(BFF)接入身份認證(3完結篇)

續集3 前篇文章在前面發布,同學們可以自行找一下。 本篇文章將繼續通過實例來詳細講解如何將前端代理服務器(BFF)接入身份認證。我們將使用一個示例應用來演示 BFF 與身份認證的集成過程。 3 在 Full BFF 中接入認證平臺 本小節將介紹如何…

Raylib 坐標系適應與GPU繪制參數

通過750 - 鼠標坐標&#xff0c;把原點在左上角的鼠標坐標變成左下角 實現輸入數據后的坐標系同GPU原點在左下角坐標相同&#xff0c; 比數組0&#xff0c;0對應左上角好&#xff0c; 此時實際上數組0&#xff0c;0對應左下角 #include <raylib.h> // 感受&#xff1a…

【SpringBoot配置文件讀取】無法讀取yaml文件中文字符

1. yaml配置文件 注意要將該文件編碼格式改為UTF-8 spring:application:name: 好好學習admin:name: 李斯age: 24books:- name: 數據結構desc: 數據書- name: 編譯原理desc: 編譯書2.配置實體類 Data設置get&#xff0c;set方法Component注冊為BeanConfigurationProperties(p…

開發者聊科學作息時間表

非常有幸對科學作息時間表app的開發者做一次采訪。 問&#xff1a;你對科學作息時間表app滿意么&#xff1f; 答&#xff1a;非常不滿意&#xff0c;我們的設想是讓他更智能&#xff0c;更多的提醒方式&#xff0c;更好的交互體驗。如果作為一個鬧鐘他是非常不合格的&#xff0…

輕松駕馭Python 3.11:Windows環境下的安裝與配置全攻略

引言 Python是一種功能強大且易于學習的編程語言&#xff0c;廣泛應用于Web開發、數據分析、人工智能和自動化等領域。為了在Windows中使用Python&#xff0c;首先需要安裝Python解釋器并進行環境配置。本文將詳細介紹如何在Windows中安裝Python 3.11并進行環境配置。 目錄 …

R可視化數據必要格式——長格式

一、引言 我們在對數據進行可視化時遇到最頭疼、最常見的問題是什么&#xff1f;數據問題。 因為我們往往不會從零自己編程進行可視化&#xff0c;往往是現有模板或積累&#xff0c;而正確的數據格式對應正確的圖形包要求&#xff0c;一定會正確出圖&#xff0c;所以只有一個問…

調試 hipcc 的llvm llc gpu目標代碼生成模塊

源碼&#xff1a; hello_vectorAdd.hip: __global__ void vectorAdd(const float *A, const float *B, float *C) {int i blockDim.x * blockIdx.x threadIdx.x;C[i] A[i] B[i] 0.0f; } Makefile: x.O1.s: hello_vectorAdd.hip../../local_amdgpu/bin/clang ./hello_vec…

力扣hot100-普通數組2

文章目錄 題目&#xff1a;輪轉數組方法1-使用額外的數組方法2-三次反轉數組 除自身以外數組的乘積方法1-用到了除法方法2-前后綴乘積法 題目&#xff1a;輪轉數組 原題鏈接&#xff1a;輪轉數組 方法1-使用額外的數組 方法1是自己寫出來的。方法2參考的別人的&#xff0c;…

通配符和正則表達式之間的關系

通配符和正則表達式&#xff08;正則&#xff09;都是用于匹配字符串的工具&#xff0c;但它們的復雜性和用途有所不同。下面是它們之間的主要關系和區別&#xff1a; 通配符 通配符主要用于簡單的模式匹配&#xff0c;常見于文件系統操作中&#xff0c;例如在命令行中查找文…

AttackGen:一款基于LLM的網絡安全事件響應測試工具

關于AttackGen AttackGen是一款功能強大的網絡安全事件響應測試工具&#xff0c;該工具利用了大語言模型和MITRE ATT&CK框架的強大功能&#xff0c;并且能夠根據研究人員選擇的威脅行為組織以及自己組織的詳細信息生成定制化的事件響應場景。 功能介紹 1、根據所選的威脅行…

【MindSpore學習打卡】應用實踐-計算機視覺-FCN圖像語義分割-基于MindSpore實現FCN-8s進行圖像語義分割的教程

圖像語義分割是計算機視覺領域中的一個重要任務&#xff0c;它旨在對圖像中的每個像素進行分類&#xff0c;從而實現對圖像內容的詳細理解。在眾多圖像語義分割算法中&#xff0c;全卷積網絡&#xff08;Fully Convolutional Networks, FCN&#xff09;因其端到端的訓練方式和高…

7.7、指針和函數

代碼 #include <iostream> using namespace std;//實現兩個數字進行交換 void swap01(int a, int b) {int temp a;a b;b temp;cout << "swap01a " << a << endl;cout << "swap01b " << b << endl; }void sw…

08 docker Registry搭建docker私倉

目錄 本地鏡像發布流程 1. docker pull registry 下載鏡像 2. docker run 運行私有庫registry 3. docker commit 構建鏡像 4. docker tag 修改新鏡像&#xff0c;使之符合私服規范tag 5. 修改配置文件使之支持http 6. curl驗證私服庫上有什么鏡像 7. push推送 pull拉取 …

Activity、Window、DecorView的關系

目錄 一、Activity、Window、DecorView的層級關系如下圖所示&#xff1a; 1、Activity 2、Window 3、DecorView 二、DecorView初始化相關源碼 三、DecorView顯示時機 前言&#xff1a; 不同的Android版本有差異&#xff0c;以下基于Android 11進行講解。 一、Activi…

Halide AOT模式

這種模式會提前&#xff0c;會提前編譯好&#xff0c;變成dll什么的&#xff0c;可接受任何輸入的參數運行。 然后這樣調用&#xff0c;必須要make一下前一個file&#xff0c;才有后面的.h

魔行觀察-AI數據分析-蜜雪冰城

摘要 本報告旨在評估蜜雪冰城品牌作為投資對象的潛力和價值&#xff0c;基于其經營模式、門店分布、人均消費、覆蓋省份等關鍵指標進行分析。 數據數據源&#xff1a;魔行觀察&#xff1a;http://www.wmomo.com/#/brand/brandDetails?code10013603 品牌概覽 蜜雪冰城是中國…

拼多多職位數據信息采集

數據信息采集 洛哥爬蟲【視頻】 愛寫爬蟲 我愛扣腳 https://careers.pinduoduo.com/jobs#/from DrissionPage import ChromiumPage, ChromiumOptions def fetch_pinduoduo_jobs():# 創建ChromiumOptions對象co ChromiumOptions()# 提供瀏覽器可執行文件的路徑path rC:\Pro…

Vue 爬坑

都是基于最新的Vue3版本 "vue": "^3.4.29" 1 vue組建樣式設置 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vue </script><template><div><a href"https://vitejs.dev" tar…

RPA 第一課

RPA 是 Robotic Process Automation 的簡稱&#xff0c;意思是「機器人流程自動化」。 顧名思義&#xff0c;它是一種以機器人&#xff08;軟件&#xff09;來替代人&#xff0c;實現重復工作自動化的工具。 首先要說一句&#xff0c;RPA 不是 ChatGPT 出來之后的產物&#x…

Ubuntu24.04安裝Skynet環境

安裝依賴 sudo apt-get -y install gcc sudo apt-get -y install g sudo apt-get -y install make sudo apt-get install -y autoconf automake libtool sudo apt-get install -y git 或者可以用&#xff1a; sudo apt-get -y install gcc g make autoconf automake libtool…