Decoding worker#
PGDは、データが送信されるノードの数に関係なく、デコードを1回実行するデコードワーカープロセスを有効にするオプションを提供します。このオプションは、各PGDノードに新しいプロセスWALデコーダーを導入します。接続ごとに1つのWAL送信者プロセスがまだ存在しますが、これらのプロセスはデータの送受信のタスクを実行するだけです。まとめると、これらの変更は、大規模なPGDグループのCPUオーバーヘッドを削減し、WAL送信プロセスが通信により多くの時間を費やすようになったため、より高いレプリケーションスループットを可能にします。
有効にする#
enable_wal_decoder
は、各PGDグループのオプションであり、現在デフォルトで無効になっています。
bdr.alter_node_group_option() を使用して、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ファイルはバイナリで可変サイズです。
bdr.max_lcr_segment_file_size
デフォルトの1GBを調整することにより、LCRファイルの最大サイズを制御できます。
トランザクションストリーミングでの使用#
トランザクションストリーミングでの使用 とデコードワーカーを同時に有効にすることが可能です。トランザクションストリーミングは、WAL送信者がコミットする前に部分的なトランザクションを送信でき、レプリケーションラグを削減できることを意味します。 WALデコーダーが部分トランザクションのデコードをサポートするようになったため、デコードワーカーは部分トランザクションをデコードし、LCRファイルに保存できます。次に、 LCRファイルを使用して、サブスクライバノードにトランザクションを適用します。これにより、遅延が減少することによりCPU使用率が削減され、「.spill」ファイルが生成されないため、ディスク領域の使用量が削減されます。
WALデコーダーは常にトランザクションをLCRにストリーミングしますが、ダウンストリーム要求に基づいて、WAL送信者はトランザクションをストリーミングするか、通常のBEGIN..COMMIT
シナリオを模倣します。
この機能をサポートするために、システムは追加のストリーミングファイルを作成します。これらのファイルは、
STR_TXN_<file-name-format> およびCAS_TXN_<file-name-format>
で始まる名前があり、ストリーミングされた各トランザクションは独自のペアを作成します。
WALデコーダーを使用したトランザクションストリーミングを有効にするには、
bdr.alter_node_group_option を使用してPGDグループのbdr.streaming_mode
セットを`default’に設定します。