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