すべてのプロダクト
Search
ドキュメントセンター

PolarDB:Global consistency

最終更新日:Mar 29, 2026

PolarDB for PostgreSQL はカーネルレベルで強力な整合性を適用し、クラスター内の任意のノードに送信された読み取りリクエストが常に最新のコミット済みデータを返すことを保証します。

適用範囲

グローバル整合性は、以下のバージョンの PolarDB for PostgreSQL でサポートされています:

  • PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.9.9.0 以降)

  • PostgreSQL 14 (マイナーエンジンバージョン 2.0.14.11.22.0 以降)

マイナーエンジンバージョンを確認するには、コンソールにログインするか、SHOW polardb_version; を実行します。バージョンが要件を満たさない場合は、マイナーエンジンバージョンをアップグレードする を実行してください。手順については、「マイナーエンジンバージョンの表示」をご参照ください。

背景情報

デフォルトでは、PolarDB の読み取り専用ノードはセッションの一貫性を提供します。データを書き込んだクライアントが同じセッション内で直ちにそれを読み戻すと、リクエストが読み取り専用ノードにルーティングされた場合でも、最新の値が表示されます。しかし、異なるセッションやサービスからの読み取りでは、最新の書き込みが反映されることは保証されません。

このギャップは、マイクロサービスアーキテクチャにおいて実際の問題を引き起こします。サービス A が値を書き込み、メッセージキューを介してイベントを公開した後、サービス B が読み取り専用ノードから読み取りを行うと、古いデータがまだ表示される可能性があります。グローバル整合性がなければ、唯一の安全な選択肢は、すべての読み取りを読み書きノードにルーティングすることです。これにより、読み取り専用ノードのキャパシティがアイドル状態になり、アプリケーションは 2 つの異なるデータベース接続セットを維持する必要があります。

グローバル整合性はこの制約を解消し、どのセッションやサービスがリクエストを発行したかに関わらず、すべての読み取り専用ノードが常に最新のコミット済みデータを返すことを保証します。

仕組み

読み書きノードでコミットされたすべての読み書きトランザクションには、コミットシーケンス番号 (CSN) が割り当てられます。CSN はグローバルなトランザクションコミット順序を定義し、ネイティブの PostgreSQL で使用されるアクティブなトランザクションリストを置き換えることで、より効率的なスナップショットメカニズムを可能にします。読み書きノードは各 CSN を先行書き込みログ (WAL) に記録し、読み取り専用ノードは WAL を再生して完全なトランザクション状態を再構築します。

クライアントがグローバル整合性の下で読み取り専用ノードにクエリを実行すると、次のようになります:

  1. 読み取り専用ノードは、ネットワークを介して読み書きノードから最新の CSN をフェッチします。

  2. その CSN に基づいて強力な整合性の読み取りビューを構築し、WAL の再生が対応するオフセットに達するのを待ちます。

  3. 強力な整合性の読み取りビューを使用してデータの可視性を評価し、結果をクライアントに返します。

imageimage

グローバル整合性の有効化

前提条件

開始する前に、以下を確認してください:

  • サポートされているバージョンを実行している PolarDB for PostgreSQL クラスター (「適用範囲」をご参照ください)

  • PolarDB コンソールへのアクセス権

CSN 機能の有効化

  1. PolarDB コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  3. 左上隅で、クラスターがデプロイされているリージョンを選択します。

  4. 対象のクラスター ID をクリックします。

  5. 左側のナビゲーションウィンドウで、[設定と管理] > [パラメーター] を選択します。

  6. polar_csn_enablepolar_global_csn_enable の両方を on に設定します。

    重要

    保存後、変更を有効にするにはクラスターを再起動する必要があります。再起動ウィンドウは事前にスケジュールしてください。パラメーター設定の手順については、「」をご参照ください。

整合性レベルの設定

  1. クラスターの [基本情報] ページで、[データベース接続] セクションに移動し、[クラスターエンドポイント] の横にある [設定] をクリックします (またはダイアログボックスの [設定] をクリックします)。

    Database Connections section showing the Configure button next to Cluster Endpoint

  2. エンドポイント設定ページで、[整合性レベル][グローバル整合性 (強整合性)] に設定します。

  3. 関連する 2 つのパラメーターを設定します:

    パラメーター説明デフォルト値
    Global Consistency Timeout読み取り専用ノードが WAL 再適用を待機する時間(タイムアウト適用前の猶予期間)。有効な値:1~1,000,000。単位:ms。100
    Global Consistency Timeout Policy読み取り専用ノードのタイムアウト発生時に実行するアクション。以下の表をご参照ください。0

    [グローバル整合性タイムアウトポリシー] の値:

    動作
    00, プライマリノードにリクエストを送信 (デフォルト)
    11, タイムアウトによりエラーメッセージを返す
    22, タイムアウトにより非整合読み取りに自動的にダウングレード

よくある質問

特定のセッションでグローバル整合性を無効にする方法

クラスターエンドポイントでグローバル整合性が有効になると、すべての新しい接続に適用されます。単一のセッションでオプトアウトするには、次を実行します:

SET polar_scc_enable = off;

グローバル整合性のタイムアウトを調整する方法

PolarDB コンソールで、対象のクラスターエンドポイントの横にある [設定] (またはダイアログボックスの [設定]) をクリックし、[グローバル整合性タイムアウト] の値を更新します。

タイムアウトが発生すると、クライアントは次のメッセージを受け取ります:

SCC timeout waiting for WAL replay
書き込みワークロードが重い、または不安定なクラスターの場合は、[グローバル整合性タイムアウト] を増やしてタイムアウトの頻度を減らしてください。

書き込み負荷が低いシナリオで読み取り遅延を回避する方法

書き込み負荷が低いシナリオでは、読み取り専用ノードが新しいデータがない場合でも WAL 再実行を待機することがあります。この遅延を軽減するには、PolarDB コンソールsynchronous_commit パラメーターを on に設定します。手順については、「クラスター パラメーターの設定」をご参照ください。

タイムアウト後に整合性を自動的にダウングレードする方法

PolarDB コンソールで、対象のクラスターエンドポイントの横にある [設定] (またはダイアログボックスの [設定]) をクリックし、[グローバル整合性タイムアウトポリシー][2, タイムアウトにより非整合読み取りに自動的にダウングレード] に設定します。タイムアウトが発生すると、クエリは非整合読み取りで続行され、クライアントにエラーは返されません。