全部產品
Search
文件中心

PolarDB:全域一致性

更新時間:Jan 23, 2026

本文檔介紹了全域一致性功能的前提條件、背景資訊、技術方案、開啟方式以及常見問題。

概述

PolarDB PostgreSQL版提供全域一致性功能,在資料庫核心層面提供全域一致性的能力,保證發往叢集任意節點的讀請求都可以獲得強一致性的結果。

適用範圍

支援的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 14(核心小版本2.0.14.11.22.0及以上)。

說明

您可在控制台查看核心小版本號碼,也可以通過SHOW polardb_version;語句查看。如未滿足核心小版本要求,請升級核心小版本

背景資訊

在原有的PolarDB一寫多讀的資料庫結構描述中,RO節點預設提供會話一致性讀取功能。物理複製和共用儲存技術雖然可以有效降低RO節點的複寫延遲,但不能保證發往RO節點的唯讀請求讀取到RW節點上最新寫入的資料。在一些對資料延遲比較敏感的金融行業和遊戲行業中,RO節點延遲讀取會造成商務邏輯的一致性問題。

image

如上圖所示,業務應用經常通過微服務架構進行解耦,服務A寫入資料後,產生一條寫入成功的訊息,通過訊息佇列組件通知到服務B。在會話一致性的情境下,服務A在col被更新到20後,使用同一個會話立即去讀,哪怕是請求路由到RO,也能讀到最新的結果20,但是在服務A通知服務B資料更新後,服務B直接讀RO,很可能無法保證得到最新結果,還是讀到10。此種情況可能給上層業務帶來資料一致性問題,面對該情境,業務側只能將讀請求轉寄到RW節點上,以保證寫後讀的資料一致性,RO節點資源也因此被閑置。

技術方案

PolarDB PostgreSQL版在資料庫核心層面提供了RO節點的強一致性讀能力,始終保證能看到RW節點最新寫入的資料,從而提供了叢集維度強一致性讀能力。在開啟全域一致性功能後,RW節點上每個讀寫事務提交時,都會賦予一個CSN(Commit Sequence Number),表示事務提交序,用來構建更高效的事務快照,以替代原生PostgreSQL的活躍事務列表。同時,RW節點會把CSN記錄到WAL中,RO節點通過回放WAL構建出完整的事務狀態。

RO節點強一致性讀能力的SQL執行過程如下:

  1. 用戶端向RO節點發起查詢請求。

  2. RO節點通過網路擷取RW節點當前最大的CSN(Commit Sequence Number)。

  3. RO節點根據RW節點的最大CSN構建強一致性唯讀視圖,並等到RO節點事務狀態回放到相應位點。

  4. RO節點根據強一致性讀視圖判斷資料可見度,給用戶端返回結果。

image

開啟步驟

  1. 登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。

  2. 在左側導覽列中,選擇配置与管理 > 参数配置設定polar_csn_enablepolar_global_csn_enable的值為on,用於開啟事務CSN(Commit Sequence Number)的特性。

    說明

    需要注意的是,參數修改需要重啟叢集,請在修改參數前做好業務安排,謹慎操作。通過控制台設定叢集參數詳細介紹,請參考設定叢集參數

  3. 在目的地組群的基本信息頁面的数据库连接地區,單擊集群地址【推荐】右側的配置或彈窗頁面的点击设置image

  4. 在編輯地址配置版面設定一致性層級為全局一致性(强),同時需要配置另外兩個關聯參數:

    參數

    描述

    全局一致性读超时时间

    為了保證一致性,等待唯讀節點同步到最新資料的逾時時間。取值範圍:1~1000000。單位:ms。預設值為100。

    全局一致性读超时策略

    在唯讀節點等待逾時的執行策略。取值範圍如下:

    • 0,发送该请求到主节点(默认值)

    • 1,超时报错,客户端返回错误提示信息

    • 2,超时降级自动降级为非一致性读取

常見問題

開啟全域一致性功能後,如果某些查詢不需要使用全域一致性讀,該如何操作?

在RO節點開啟全域一致性後,預設對所有的建立串連生效。如果某些查詢不需要使用該功能,可以通過以下命令關閉當前會話的全域一致性讀:

SET polar_scc_enable = off;

如何設定全域一致性讀逾時時間

登入PolarDB控制台,單擊目的地組群地址右側的配置或彈窗頁面的点击设置,修改全局一致性读超时时间。如果逾時,用戶端會收到以下錯誤資訊:

SCC timeout waiting for WAL replay
說明

對於寫入壓力較大,或寫入壓力不穩定的叢集,您可以將全局一致性读超时时间的值設定大一些。

全域一致性讀逾時後,如何降級?

登入PolarDB控制台,單擊目的地組群地址右側的配置或彈窗頁面的点击设置,設定全局一致性读超时策略2,超时降级自动降级为非一致性读取。當全域一致性讀逾時後,查詢操作會自動降級為非一致性讀取,且用戶端不會收到報錯資訊。全域一致性讀逾時策略的取值範圍及詳細介紹請參考全域一致性讀逾時策略參數描述

如何避免低寫入負載情境下的讀延遲?

登入PolarDB控制台,設定高績效參數synchronous_commit值為on,以避免低寫入情境下的讀延遲。通過控制台修改參數詳細操作請參考設定叢集參數