Decoding worker#
PGDは、データが送信されるノードの数に関係なく、デコードを1回実行するデコードワーカープロセスを有効にするオプションを提供します。このオプションは、各PGDノードに新しいプロセスWALデコーダーを導入します。接続ごとに1つのWAL送信者プロセスがまだ存在しますが、これらのプロセスはデータの送受信のタスクを実行するだけです。まとめると、これらの変更は、大規模なPGDグループのCPUオーバーヘッドを削減し、WAL送信プロセスが通信により多くの時間を費やすようになったため、より高いレプリケーションスループットを可能にします。
有効にする#
enable_wal_decoder
は、各PGDグループのオプションであり、現在デフォルトで無効になっています。
bdr.alter_node_group_config()を使用したグループ構成 を使用して、PGDグループのデコードワーカーを有効または無効にできます。
デコードワーカーが有効になっている場合、
PGDは論理変更レコードLCRファイルを保存して、デコードの間、およびすべてのサブスクライブノードがデータを受信したときに変更のバッファリングを許可します。
LCRファイルは、各ローカルノードのデータディレクトリのpg_logical
ディレクトリの下に保存されます。レプリケーション遅延が増加すると、LCRファイルの数とサイズが変化するため、このプロセスも監視が必要です。どのPGDノードでも必要とされないLCRは、定期的にクリーニングされます。
2つの連続するクリーンアップ間の間隔は、
bdr.lcr_cleanup_interval によって制御されます。デフォルトは3分です。 bdr.lcr_cleanup_interval が0の場合、クリーンアップは無効になります。
無効化#
無効にすると、論理デコードは、各ノードをサブスクライブする各ノードのWAL送信プロセスによって実行されます。この場合、LCRファイルは書き込まれません。
PGDグループでデコードワーカーが有効になっている場合でも、次のGUCはノードごとにLCRの生成と使用を制御します。デフォルトでは、これらはfalse
です。 LCRを生成および使用するには、
PGDグループのデコードワーカーを有効にし、PGDグループの各ノードでこれらのGUCをtrue
に設定します。
bdr.enable_wal_decoder —
falseの場合、LCRを使用するすべてのWAL送信者はWALを直接使用するように再起動します。trueとPGDグループ構成を使用すると、デコードワーカープロセスが開始され、LCRおよびLCRを使用するWALセンダーが生成されます。bdr.receive_lcr —サブスクライブノードで
trueを実行すると、パブリッシャーノードのWAL送信者にLCRを使用するように要求します利用可能な場合。
サブスクライバ専用ノードは、各ノードから変更を直接受信します。したがって、加入者専用ノードにサービスを提供するWAL送信者は、LCRを使用できます。
LCRが生成されても、対応するWALは、デコードワーカーが有効になっていない場合と同様に保持されます。将来的には、LCRが必要でない場合、LCRに対応するWALを削除することが可能になる可能性があります。
参考までに、 LCRファイル名の最初の24文字は、WALファイル名のものと似ています。名前の最初の8文字は現在すべて「0」です。将来的には、WALセグメントファイル名の最初の8文字と同様のTimeLineIdを表すことが予想されます。次の16文字の名前のシーケンスは、WALストリームに対してLCR変更を追跡するために使用されるWALセグメント番号に似ています。
ただし、論理変更は、それらが属しているトランザクションのコミット順序に従って並べ替えられます。したがって、LCRセグメント内のそれらの配置は、WALセグメント内の対応するWALの配置と一致しません。
最後の16文字のセットは、LCRセグメントのサブセグメント番号を表します。各LCRファイルはサブセグメントに対応します。
LCRファイルはバイナリで可変サイズです。
LCRファイルの最大サイズは、bdr.max_lcr_segment_file_size
で制御できます。デフォルトは1 GBです。