【PostgreSQL系列】PostgreSQL 復制參數詳解

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。
img

  • 推薦:kwan 的首頁,持續學習,不斷總結,共同進步,活到老學到老
  • 導航
    • kwan 的解憂雜貨鋪:全面總結 java 核心技術,jvm,并發編程 redis,kafka,Spring,微服務等
    • 常用開發工具系列:常用的開發工具,IDEA,Mac,Alfred,Git,typora 等
    • 數據庫系列:詳細總結了常用數據庫 mysql 技術點,以及工作中遇到的 mysql 問題等
    • 新空間代碼工作室:提供各種軟件服務,承接各種畢業設計,畢業論文等
    • 懶人運維系列:總結好用的命令,解放雙手不香嗎?能用一個命令完成絕不用兩個操作
    • 數據結構與算法系列:總結數據結構和算法,不同類型針對性訓練,提升編程思維,劍指大廠

非常期待和您一起在這個小小的網絡世界里共同探索、學習和成長。💝💝💝 ?? 歡迎訂閱本專欄 ??

博客目錄

    • 一、復制參數基礎概念
    • 二、核心復制參數深度解析
      • 1. max_wal_senders:WAL 發送進程數量控制
      • 2. max_replication_slots:復制槽管理
      • 3. WAL 保留策略參數組
    • 三、復制性能與可靠性參數
      • 1. wal_sender_timeout:網絡可靠性保障
      • 2. track_commit_timestamp:高級復制支持
    • 四、生產環境配置策略
      • 1. 參數協同配置原則
      • 2. 高可用性配置示例
      • 3. 監控與調優建議
    • 五、特殊場景處理
      • 1. 處理復制延遲問題
      • 2. 邏輯復制特殊考慮

PostgreSQL 作為一款功能強大的開源關系型數據庫,其復制功能對于構建高可用性系統至關重要。

一、復制參數基礎概念

PostgreSQL 的復制系統主要基于預寫式日志(WAL)機制,通過將主服務器上的數據變更傳播到一個或多個備用服務器來實現數據冗余。這一過程由多個關鍵參數控制,它們共同決定了復制的行為特征和性能表現。

在 PostgreSQL 復制架構中,主服務器(primary)負責生成 WAL 記錄,而備用服務器(standby)則接收并應用這些記錄。這種機制不僅支持高可用性解決方案,還能實現讀寫分離,有效提升系統整體性能。理解這些復制參數的工作原理,對于構建穩定可靠的數據庫復制環境至關重要。
在這里插入圖片描述

二、核心復制參數深度解析

1. max_wal_senders:WAL 發送進程數量控制

max_wal_senders參數決定了系統能夠同時運行的 WAL 發送進程的最大數量。每個連接到主服務器的備用服務器都需要一個獨立的 WAL 發送進程。默認情況下該參數被注釋,意味著系統不會預留任何 WAL 發送進程。

配置建議

  • 設置值應大于當前備用服務器數量,為未來擴展預留空間
  • 典型生產環境建議設置為 5-10,具體取決于復制拓撲復雜度
  • 修改此參數需要重啟 PostgreSQL 服務才能生效

例如,在有 2 個備用服務器的情況下,建議設置為:

max_wal_senders = 5

2. max_replication_slots:復制槽管理

復制槽是 PostgreSQL 中確保 WAL 文件保留的重要機制。max_replication_slots參數控制系統中可以創建的復制槽最大數量。每個物理復制備用服務器通常需要一個復制槽,而邏輯復制訂閱者可能需要額外的復制槽。

關鍵特性

  • 防止主服務器過早刪除備用服務器尚未接收的 WAL 文件
  • 必須與max_wal_senders參數協調配置
  • 修改同樣需要重啟服務

典型配置示例:

max_replication_slots = 5

3. WAL 保留策略參數組

PostgreSQL 提供了多個參數來精細控制 WAL 文件的保留策略:

wal_keep_size(默認 0MB):

  • 指定主服務器應保留的 WAL 文件大小(MB)
  • 即使沒有復制槽也會保留指定量的 WAL
  • 替代了舊版本中的 wal_keep_segments 參數

max_slot_wal_keep_size(默認-1MB):

  • 控制復制槽保留的 WAL 文件最大磁盤空間
  • -1 表示無限制
  • 可防止復制槽導致 WAL 文件無限增長

配置建議

wal_keep_size = 1024  # 保留1GB WAL文件作為緩沖
max_slot_wal_keep_size = 2048  # 每個復制槽最多保留2GB WAL

三、復制性能與可靠性參數

1. wal_sender_timeout:網絡可靠性保障

wal_sender_timeout參數(默認 60 秒)決定了 WAL 發送進程等待備用服務器響應的最長時間。超過此時限,發送進程將終止連接。

調優建議

  • 在穩定網絡環境中可保持默認值
  • 高延遲或不穩定網絡應適當增大該值
  • 設置為 0 可禁用超時(不推薦生產環境使用)

示例配置:

wal_sender_timeout = 120s  # 適用于跨數據中心復制

2. track_commit_timestamp:高級復制支持

track_commit_timestamp參數(默認 off)控制是否記錄事務提交的時間戳信息。雖然這會帶來輕微的性能開銷,但對于某些高級功能至關重要。

應用場景

  • 邏輯復制需要此功能確定事務順序
  • 時間點恢復(PITR)操作
  • 數據庫審計和監控工具

啟用配置:

track_commit_timestamp = on

四、生產環境配置策略

1. 參數協同配置原則

在配置復制參數時,必須考慮各參數間的相互影響:

  • max_wal_senders應大于等于max_replication_slots
  • wal_keep_size和復制槽機制可以互補使用
  • 網絡延遲因素應反映在wal_sender_timeout設置中

2. 高可用性配置示例

典型的高可用環境配置可能如下:

# 復制基礎配置
max_wal_senders = 10
max_replication_slots = 8# WAL保留策略
wal_keep_size = 2048MB
max_slot_wal_keep_size = 4096MB# 網絡與性能
wal_sender_timeout = 90s
track_commit_timestamp = on

3. 監控與調優建議

  • 定期檢查pg_stat_replication視圖監控復制狀態
  • 監控 WAL 目錄大小,防止因配置不當導致磁盤空間耗盡
  • 根據備用服務器延遲情況調整 WAL 保留參數
  • 在重大業務變化(如大促)前重新評估復制配置

五、特殊場景處理

1. 處理復制延遲問題

當遇到復制延遲時,可考慮:

  • 增加wal_keep_size提供更大的緩沖空間
  • 檢查網絡狀況并適當調整wal_sender_timeout
  • 確保max_wal_senders和復制槽數量充足

2. 邏輯復制特殊考慮

邏輯復制需要特別注意:

  • 必須啟用track_commit_timestamp
  • 可能需要額外的復制槽
  • WAL 保留需求通常高于物理復制

覺得有用的話點個贊 👍🏻 唄。
??????本人水平有限,如有紕漏,歡迎各位大佬評論批評指正!😄😄😄

💘💘💘如果覺得這篇文對你有幫助的話,也請給個點贊、收藏下吧,非常感謝!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且長,行則將至,讓我們一起加油吧!🌙🌙🌙

img

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

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

相關文章

阿里巴巴開源移動端多模態LLM工具——MNN

MNN 是一個高效且輕量級的深度學習框架。它支持深度學習模型的推理和訓練,并在設備端的推理和訓練方面具有行業領先的性能。目前,MNN 已集成到阿里巴巴集團的 30 多個應用中,如淘寶、天貓、優酷、釘釘、閑魚等,覆蓋了直播、短視頻…

Vue.js---watch 的實現原理

4.7 watch 的實現原理 watch本質上就是使用了effect以及options.scheduler 定義watch函數: // watch函數:傳入參數source以及回調函數function watch(source , cb) {effect(() > source.foo,{scheduler(){// 回調函數cb()}})}watch接收兩個參數分別是source和c…

SpringBoot3+AI

玩一下AI 1. SSE協議 我們都知道tcp,ip,http,https,websocket等等協議,今天了解一個新的協議SSE協議(Server-Sent Events) SSE(Server-Sent Events) 是一種允許服務器…

vscode中Debug c++

在vscode中Debug ros c程序 1 在Debug模式下編譯 如果用命令行catkin_make,在輸入catkin_make時加上一個參數: catkin_make -DCMAKE_BUILD_TYPEDebug 或者直接修改CMakelist.txt,添加以下代碼: SET(CMAKE_BUILD_TYPE "D…

【ROS2】 核心概念6——通信接口語法(Interfaces)

古月21講/2.6_通信接口 官方文檔:Interfaces — ROS 2 Documentation: Humble documentation 官方接口代碼實戰:https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.html ROS 2使用簡化的描…

C#里與嵌入式系統W5500網絡通訊(2)

在嵌入式代碼里,需要從嵌入式的MCU訪問W5500芯片。 這個是通過SPI通訊來實現的,所以要先連接SPI的硬件通訊線路。 接著下來,就是怎么樣訪問這個芯片了。 要訪問這個芯片,需要通過SPI來發送數據,而發送數據又要有一定的約定格式, 于是芯片廠商就定義下面的通訊格式: …

SuperYOLO:多模態遙感圖像中的超分辨率輔助目標檢測之論文閱讀

摘要 在遙感影像(RSI)中,準確且及時地檢測包含數十像素的多尺度小目標仍具有挑戰性。現有大多數方法主要通過設計復雜的深度神經網絡來學習目標與背景的區分特征,常導致計算量過大。本文提出一種兼顧檢測精度與計算代價的快速準確…

計算機軟件的基本組成

計算機軟件的基本組成 一, 計算機軟件的分類 軟件按其功能分類, 可分為系統軟件和應用軟件 圖解 (1)系統軟件 系統軟件是一組保證計算機系統高效, 正確運行的基礎軟件, 軟件通常作為系統資源提供給用戶使用. 系統軟件主要有操作系統(OS), 數據庫管理系統(DBMS), 語言處理程…

unity開發游戲實現角色篩選預覽

RenderTexture通俗解釋 RenderTexture就像是Unity中的"虛擬相機膠片",它可以: 捕獲3D內容:將3D場景或對象"拍照"記錄下來 實時更新:不是靜態圖片,而是動態視頻,角色可以動起來 用作…

Spring源碼主線全鏈路拆解:從啟動到關閉的完整生命周期

Spring源碼主線全鏈路拆解:從啟動到關閉的完整生命周期 一文看懂 Spring 框架從啟動到銷毀的主線流程,結合原理、源碼路徑與偽代碼三位一體,系統學習 Spring 底層機制。 1. 啟動入口與環境準備 原理說明 Spring Boot 應用入口是標準 Java 應…

SAP RF 移動屏幕定制

SAP RF 移動屏幕定制 ITSmobile 是 SAP 當前將移動設備連接到 SAP 系統的技術基礎。它基于 SAP Internet Transaction Server (ITS),從 Netweaver 2004 開始作為 Netweaver 平臺的一部分提供。ITSmobile 提供了一個框架,用于為任何 SAP 事務生成基于 HT…

Spark,數據提取和保存

以下是使用 Spark 進行數據提取(讀取)和保存(寫入)的常見場景及代碼示例(基于 Scala/Java/Python,不含圖片操作): 一、數據提取(讀取) 1. 讀取文件數據&a…

如何用mockito+junit測試代碼

Mockito 是一個流行的 Java 模擬測試框架,用于創建和管理測試中的模擬對象(mock objects)。它可以幫助開發者編寫干凈、可維護的單元測試,特別是在需要隔離被測組件與其他依賴項時。 目錄 核心概念 1. 模擬對象(Mock Objects) 2. 打樁(Stubbing) 3. 驗…

最新缺陷檢測模型:EPSC-YOLO(YOLOV9改進)

目錄 引言:工業缺陷檢測的挑戰與突破 一、EPSC-YOLO整體架構解析 二、核心模塊技術解析 1. EMA多尺度注意力模塊:讓模型"看得更全面" 2. PyConv金字塔卷積:多尺度特征提取利器 3. CISBA模塊:通道-空間注意力再進化 4. Soft-NMS:更智能的重疊框處理 三、實…

【Linux網絡與網絡編程】12.NAT技術內網穿透代理服務

1. NAT技術 之前我們說到過 IPv4 協議中IP 地址數量不充足的問題可以使用 NAT 技術來解決。還提到過本地主機向公網中的一個服務器發起了一個網絡請求,服務器是怎么將應答返回到該本地主機呢?(如何進行內網轉發?) 這就…

uniapp的適配方式

文章目錄 前言? 一、核心適配方式對比📏 二、rpx 單位:uni-app 的核心適配機制🧱 三、默認設計稿適配(750寬)🔁 四、字體 & 屏幕密度適配🛠 五、特殊平臺適配(底部安全區、劉海…

JAVA EE(進階)_進階的開端

別放棄浸透淚水的昨天,晨光已為明天掀開新篇 ——陳長生. ?主頁:陳長生.-CSDN博客? 📕上一篇:JAVA EE_HTTP-CSDN博客 1.什么是Java EE Java EE(Java Pla…

SQL腳本規范

主要作用:數據庫的備份和遷移 SQL腳本規范 每一個sql語句必須與;結束 腳本結構: { 刪庫,建庫 刪表,建表 插入初始數據 } 建庫語法: CREATE DATABASE 數據庫名CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CHARA…

std::ratio<1,1000> 是什么意思?

author: hjjdebug date: 2025年 05月 14日 星期三 09:45:24 CST description: std::ratio<1,1000> 是什么意思&#xff1f; 文章目錄 1. 它是一種數值嗎&#xff1f;2. 它是一種類型嗎&#xff1f;3. std:ratio 是什么呢&#xff1f;4. 分析一個展開后的模板函數5.小結: …

測試--測試分類 (白盒 黑盒 單元 集成)

一、按照測試目標分類&#xff08;測試目的是什么&#xff09; 主類別細分說明1. 界面測試UI內容完整性、一致性、準確性、友好性&#xff0c;布局排版合理性&#xff0c;控件可用性等2. 功能測試檢查軟件功能是否符合需求說明書&#xff0c;常用黑盒方法&#xff1a;邊界值、…