Degrading commit scope rules#
SYNCHRONOUS COMMIT およびCAMO
には、それぞれ、特定のパフォーマンスしきい値を超えたときにトランザクションの要件を低下させるオプション機能があります。
GROUP COMMIT
は機能を低下させることはできませんが、タイムアウトで中断することはできます。
ノードがトランザクションを適用しており、そのトランザクションがタイムアウトした場合、単にロールバックするのではなく、完了するトランザクションの要件を低下させるプロセスをトリガーすると役立つ場合があります。
DEGRADE ON
は、トランザクションのコミットスコープルールを正常に低下させるためのルートを提供します。最も単純では、
DEGRADE ON
は、タイムアウトと、コミットスコープが正常に低下できるコミットスコープ操作の2番目のセットを取得します。
たとえば、20ミリ秒または30ミリ秒のタイムアウト後、コミットスコープを満たすための要件はALL (node_group_name) SYNCHRONOUS COMMIT
からMAJORITY (node_group_name) SYNCHRONOUS COMMIT
に低下し、トランザクションがより安定して適用されるようになります。
degrade句がトリガーされるように、書き込みリーダーがトランザクションのオリジネーターであることを必要とすることもできます。これは、たとえば2つのデータノードと1つの監視ノードがある「スプリットブレインシナリオ」で役立つ場合があります。 2つのデータノードの間でネットワークが分割され、両方のデータノードへの接続があると仮定すると、監視ノードとのraft選挙を介してリーダーに選ばれるのは一方だけであるため、一方のみが機能低下することは許可されます。
動作#
一般化されたDEGRADE
句がトランザクションに適用されたときにどのように動作するかについては、2つの部分があります。
コミット中に1回、処理中のコミットがコミットスコープルールを満たす応答を待機している間、PGDはタイムアウトをチェックし、タイムアウトが満了している場合、処理中のコミットはDEGRADE
のコミットスコープルールを待機するように再構成されます。条項。実際、この時点で、
DEGRADE
句のコミットスコープルールは既に満たされている可能性があります。
このメカニズムだけでは、目的の動作には不十分です。これだけでは、すべてのトランザクション接続の問題により低下することが確実なトランザクションも含めて、低下モードがキックインする前にタイムアウトが満了するのを待機する必要があり、パフォーマンスに重大な影響を与えるためです。このような劣化クラスターシナリオ。
これを回避するために、PGDマネージャープロセスは定期的に5秒ごとに接続と適用レート bdr.node_replication_rates のものをチェックし、レプリケーションの現在の状態に基づいて、その時点で低下するコミットスコープがある場合、それらは自動的に低下—その後の処理時にそのコミットスコープを使用するトランザクションは、タイムアウトを待機する代わりに低下ルールを使用します—レプリケーションが再び十分に迅速に移動していることをマネージャープロセスが検出するまで。
同期コミットとグループコミット#
SYNCHRONOUS COMMIT とGROUP COMMIT は両方ともtimeout
およびrequire_write_lead
パラメーターを持ち、デフォルトはそれぞれ0 およびfalse
です。デフォルトの0
では即時低下が発生するため、おそらく常にtimeout
を設定する必要があります。デグレードモードに切り替えるために、書き込みリーダーがトランザクションのオリジネーターであることを要求することもできます。ここでも、デフォルトはfalse
です。 SYNCHRONOUS COMMIT の場合、 timeout
およびrequire_write_lead
はデグレードに適用され、GROUP COMMIT
の場合、これらのパラメーターはアボートに適用されます。他のノードからの確認を待機する前にプライマリで既にコミットされているため、
GROUP COMMIT
コミットスコープはデグレードできず、SYNCHRONOUS COMMIT
コミットスコープはアボートできません。
SYNCHRONOUS COMMIT
には、どのルールに低下できるかに関するオプションもあります。これは、どのルールから低下するかによって異なります。
まず、非同期操作に低下させることができます。
ALL (left_dc) SYNCHRONOUS COMMIT DEGRADE ON (timeout=20s) TO ASYNC
同じコミットスコープ種類のより制限の低いコミットグループに低下することもできます。これも種類がSYNCHRONOUS_COMMIT
またはGROUP COMMIT
のいずれかである場合に限ります。たとえば、次のように機能を低下させることができます。
ALL (left_dc) SYNCHRONOUS COMMIT DEGRADE ON (timeout=20s) TO MAJORITY (left_dc) SYNCHRONOUS COMMIT
または次のように。
ANY 3 (left_dc) SYNCHRONOUS COMMIT DEGRADE ON (timeout=20s) TO ANY 2 (left_dc) SYNCHRONOUS COMMIT
ただし、 SYNCHRONOUS COMMIT からGROUP COMMIT
に低下することはできません。
CAMO#
Commit At Most Once は、同じtimeout およびrequire_write_lead
パラメーター同じデフォルトでそれぞれ0 およびfalse
をサポートしますが、オプションは非同期オペレーションに低下するだけであるという点で簡単です。
ALL (left_dc) CAMO DEGRADE ON (timeout=20ms, require_write_lead=true) TO ASYNC
繰り返しになりますが、デフォルトは0 であるため、 timeout
パラメーターを設定する必要があります。