先行書き込みログ(WAL)ファイルを効果的に管理するために、PolarDB for PostgreSQL では、PolarDB コンソールから論理レプリケーションスロットを表示できます。
背景情報
多くの非アクティブな論理レプリケーションスロットがタイムリーにクリーンアップされない場合、WAL ファイルは蓄積し続けます。これは、大量のストレージ容量を消費し、ディスクがいっぱいになってクラスターがロックされることさえあります。 クラスターがロックされると、データの書き込みができなくなり、ビジネス運用が中断される可能性があります。
PolarDB for PostgreSQL では、PolarDB コンソールから論理レプリケーションスロットを表示できます。論理レプリケーションスロットのアクティブ状態を監視し、非アクティブなスロットを削除して、蓄積された WAL ファイルをクリアできます。
前提条件
PolarDB for PostgreSQL 集中式クラスター(データベースエディションが Enterprise Edition または Standard Edition)の場合、PolarDB コンソールから wal_level パラメーターを設定するwal_level
パラメーターを に設定できます。このパラメーターを変更すると、クラスターが再起動します。パラメーターを変更する前に適切なビジネス上の準備を行い、慎重に進んでください。
デフォルトでは、PolarDB for PostgreSQL 分散クラスターの wal_level
パラメーターは logical
に設定されています。
論理レプリケーションスロットを表示する
クラスターに論理レプリケーションスロットが存在しない場合は、最初に関連リソースを作成する必要があります。
PolarDB コンソールで論理レプリケーションスロットを表示する場合は、お問い合わせください。
PolarDB コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] を選択します。表示されるページでクラスターのリージョンを選択し、[クラスター] リストでクラスターの ID をクリックして、クラスターの基本情報ページに移動します。
左側のナビゲーションウィンドウで、[設定と管理] > [サブスクリプション管理] を選択します。[WAL ファイル管理] タブで、論理レプリケーションスロットに関する情報を表示できます。
WAL ファイル管理パラメーター
説明
WAL ファイル管理パラメーター
説明
スロット名
論理レプリケーションスロットの名前。
スロットタイプ
論理レプリケーションスロットのタイプ。
logical
のみがサポートされています。プラグインの使用
デフォルトでは、PolarDB for PostgreSQL は次のプラグインをサポートしています。
decoderbufs
decoder_raw
wal2json
pgoutput
一時スロット
レプリケーションスロットが一時スロットかどうかを指定します。一時スロットは、現在のセッション中にのみ存在する特別なタイプの スロットであり、セッション終了後に自動的に削除されます。
true
: スロットは一時スロットです。false
: スロットは永続スロットです。
データベース名
論理レプリケーションスロットが存在するデータベース。
累積 WAL ファイル
論理レプリケーションスロットのために累積された WAL ログの量。単位:MB。
論理サブスクリプションレイテンシ
現在の論理レプリケーションスロットのパブリッシャーとサブスクライバー間の遅延。単位:秒。
アクティブかどうか
論理レプリケーションスロットが現在使用中かどうかを示します。
INACTIVE
ACTIVE
(オプション) 論理レプリケーションスロットの アクティブかどうか フィールドが INACTIVE の場合、WAL ファイルは継続的に蓄積されます。次のいずれかの方法を使用して、できるだけ早くこの問題に対処してください。
スロットをアクティブ化して、ステータスを ACTIVE に変更します。
このスロットが不要になった場合、または冗長な場合は、
SELECT pg_drop_replication_slot('slot_name');
文を使用して削除します。
(オプション) 論理レプリケーションスロットを作成する
パブリッシャーデータベースにパブリケーションを作成します。
CREATE PUBLICATION <パブリケーション名> FOR TABLE <テーブル名>;
例:
CREATE PUBLICATION pub1 FOR TABLE public.t1;
クラスター内の既存のパブリケーションを表示するには、
SELECT * FROM pg_publication;
文を実行します。サブスクライバーデータベースにサブスクリプションを作成します。この例では、パブリッシャーとサブスクライバーは同じクラスター内の異なるデータベースです。
特権アカウントを使用して、パブリッシャーデータベースに論理レプリケーションスロットを作成します。
SELECT pg_create_logical_replication_slot('', 'pgoutput');
サブスクライバーデータベースで、パブリッシャーデータベースからレプリケートするテーブルと同じスキーマと名前のテーブルを作成します。
サブスクライバーデータベースに論理サブスクリプションを作成します。
CREATE SUBSCRIPTION my_subscription CONNECTION 'channel_name=localhost dbname=<パブリッシャーデータベース> user=<特権アカウント> password=<パスワード>' PUBLICATION pub1 WITH (create_slot=false,slot_name=);
パブリッシャーデータベースとサブスクライバーデータベースが同じクラスター内にある場合は、
WITH (create_slot=false)
を追加して、サブスクライバーに新しいレプリケーションスロットを作成せずに既存の スロットを使用するように指示する必要があります。