日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文檔介紹了全局一致性功能的前提條件、背景信息、技術(shù)方案、開啟方式以及常見問題。

概述

PolarDB PostgreSQL版提供全局一致性功能,在數(shù)據(jù)庫內(nèi)核層面提供全局一致性的能力,保證發(fā)往集群任意節(jié)點的讀請求都可以獲得強一致性的結(jié)果。

前提條件

PolarDB PostgreSQL版14版本,且內(nèi)核小版本需為2.0.14.22.0及以上。

說明

您可通過如下語句查看PolarDB PostgreSQL版的內(nèi)核小版本號:

SHOW polar_version;
 polar_version 
---------------
 2.0.14.22.0
(1 row)

SHOW polar_release_date;
 polar_release_date 
--------------------
 20240630
(1 row)

背景信息

在原有的PolarDB一寫多讀的數(shù)據(jù)庫架構(gòu)中,RO節(jié)點默認(rèn)提供會話一致性讀取功能。物理復(fù)制和共享存儲技術(shù)雖然可以有效降低RO節(jié)點的復(fù)制延遲,但不能保證發(fā)往RO節(jié)點的只讀請求讀取到RW節(jié)點上最新寫入的數(shù)據(jù)。在一些對數(shù)據(jù)延遲比較敏感的金融行業(yè)和游戲行業(yè)中,RO節(jié)點延遲讀取會造成業(yè)務(wù)邏輯的一致性問題。

image

如上圖所示,業(yè)務(wù)應(yīng)用經(jīng)常通過微服務(wù)框架進(jìn)行解耦,服務(wù)A寫入數(shù)據(jù)后,產(chǎn)生一條寫入成功的消息,通過消息隊列組件通知到服務(wù)B。在會話一致性的場景下,服務(wù)A在col被更新到20后,使用同一個會話立即去讀,,哪怕是請求路由到RO,也能讀到最新的結(jié)果20,但是在服務(wù)A通知服務(wù)B數(shù)據(jù)更新后,服務(wù)B直接讀RO,很可能無法保證得到最新結(jié)果,還是讀到10。此種情況可能給上層業(yè)務(wù)帶來數(shù)據(jù)一致性問題,面對該場景,業(yè)務(wù)側(cè)只能將讀請求轉(zhuǎn)發(fā)到RW節(jié)點上,以保證寫后讀的數(shù)據(jù)一致性,RO節(jié)點資源也因此被閑置。

技術(shù)方案

PolarDB PostgreSQL版在數(shù)據(jù)庫內(nèi)核層面提供了RO節(jié)點的強一致性讀能力,始終保證能看到RW節(jié)點最新寫入的數(shù)據(jù),從而提供了集群維度的強一致性讀能力。在開啟全局一致性功能后,RW節(jié)點上每個讀寫事務(wù)提交時,都會賦予一個CSN(Commit Sequence Number),表示事務(wù)提交序,用來構(gòu)建更高效的事務(wù)快照,以替代原生PostgreSQL的活躍事務(wù)列表。同時,RW節(jié)點會把CSN記錄到WAL中,RO節(jié)點通過回放WAL構(gòu)建出完整的事務(wù)狀態(tài)。

RO節(jié)點強一致性讀能力的SQL執(zhí)行過程如下:

  1. 客戶端向RO節(jié)點發(fā)起查詢請求。

  2. RO節(jié)點通過網(wǎng)絡(luò)獲取RW節(jié)點當(dāng)前最大的CSN(Commit Sequence Number)。

  3. RO節(jié)點根據(jù)RW節(jié)點的最大CSN構(gòu)建強一致性只讀視圖,并等到RO節(jié)點事務(wù)狀態(tài)回放到相應(yīng)位點。

  4. RO節(jié)點根據(jù)強一致性讀視圖判斷數(shù)據(jù)可見性,給客戶端返回結(jié)果。

image

開啟步驟

  1. 登錄PolarDB控制臺

  2. 在左側(cè)導(dǎo)航欄單擊集群列表

  3. 在左上角,選擇集群所在地域。

  4. 找到目標(biāo)集群,單擊集群ID。

  5. 在左側(cè)導(dǎo)航欄中,選擇配置與管理 > 參數(shù)配置設(shè)置polar_csn_enablepolar_global_csn_enable的值為on,用于開啟事務(wù)CSN(Commit Sequence Number)的特性。

    說明

    需要注意的是,參數(shù)修改需要重啟集群,請在修改參數(shù)前做好業(yè)務(wù)安排,謹(jǐn)慎操作。通過控制臺設(shè)置集群參數(shù)詳細(xì)介紹,請參考設(shè)置集群參數(shù)

  6. 在目標(biāo)集群的基本信息頁面的數(shù)據(jù)庫連接區(qū)域,單擊集群地址右側(cè)的配置或彈窗頁面的點擊設(shè)置

    image

  7. 在編輯地址配置頁面設(shè)置一致性級別為全局一致性(強),同時需要配置另外兩個關(guān)聯(lián)參數(shù):

    參數(shù)

    描述

    全局一致性讀超時時間

    為了保證一致性,等待只讀節(jié)點同步到最新數(shù)據(jù)的超時時間。

    全局一致性讀超時策略

    在只讀節(jié)點等待超時的執(zhí)行策略。取值范圍如下:

    • 0,發(fā)送該請求到主節(jié)點(默認(rèn)值)

    • 1,超時報錯,客戶端返回錯誤提示信息。

    • 2,超時降級自動降級為非一致性讀取。

    image

常見問題

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

在RO節(jié)點開啟全局一致性后,默認(rèn)對所有的新建連接生效。如果某些查詢不需要使用該功能,可以通過以下命令來關(guān)閉當(dāng)前連接的全局一致性讀:

SET polar_scc_enable = off;

如何設(shè)置全局一致性讀超時時間

您可以登錄PolarDB控制臺,設(shè)置全局一致性讀超時時間參數(shù)polar_scc_wait_timeout的值來設(shè)置。如果超時,客戶端會收到以下錯誤信息:

SCC timeout waiting for WAL replay
說明

對于寫入壓力較大,或?qū)懭雺毫Σ环€(wěn)定的集群,您可以將該參數(shù)polar_scc_wait_timeout的值設(shè)置大一些。

全局一致性讀超時后,如何降級?

您需要登錄PolarDB控制臺,修改參數(shù)polar_scc_timeout_degrade_enable的值設(shè)置為ON,當(dāng)全局一致性讀超時后,查詢操作會自動降級為非一致性讀取,且客戶端不會收到報錯信息。

如何避免低寫入負(fù)載場景下的讀延遲?

您可以登錄PolarDB控制臺,將高性能參數(shù)synchronous_commit的值設(shè)置為on,以避免低寫入場景下的讀延遲。