すべてのプロダクト
Search
ドキュメントセンター

PolarDB:パラレル安全

最終更新日:Jun 03, 2024

プランナーは、クエリに含まれる操作をparallel safeparallel restricted、またはparallel unsafeのいずれかに分類します。 並列セーフ操作は、並列クエリの使用と競合しない操作です。 並列制限操作は、並列ワーカーでは実行できませんが、並列クエリの使用中にリーダーで実行できる操作です。 したがって、並列制限操作は、GatherノードまたはGather Mergeノードの下では発生しませんが、そのようなノードを含むプランの他の場所で発生する可能性があります。 並列安全でない操作は、並列クエリが使用されている間は実行できず、リーダーでも実行できない操作です。 クエリにparallel unsafeのものが含まれている場合、そのクエリに対してparallelクエリは完全に無効になります。

次の操作は常に並列制限されます。

  • 共通テーブル式 (CTE) のスキャン。

  • 一時テーブルのスキャン。

  • 外部データラッパーにIsForeignScanParallelSafe APIがない限り、外部テーブルのスキャンを行います。

  • InitPlanがアタッチされているノードを計画します。

  • 関連付けられたSubPlanを参照するノードを計画します。

関数と集計の並列ラベリング

プランナは、ユーザ定義関数または集合体が並列安全、並列制限、または並列安全でないかどうかを自動的に決定することはできない。 一般に、これは停止問題と同等であり、したがって不可能です。 実行できると考えられる単純な関数であっても、これは高価でエラーが発生しやすいため、試行しません。 代わりに、すべてのユーザー定義関数は、他にマークが付けられない限り、並列安全でないと見なされます。 CREATE FUNCTIONまたはALTER FUNCTIONを使用する場合、PARALLEL SAFEPARALLEL RESTRICTED、またはPARALLEL UNSAFEを適宜指定してマーキングを設定できます。 CREATE AGGREGATEを使用する場合、PARALLELオプションは、対応する値としてSAFERESTRICTED、またはUNSAFEで指定できます。

データベースへの書き込み、シーケンスへのアクセス、一時的なトランザクション状態の変更 (エラーを検出するためにEXCEPTIONブロックを確立するPL/pgSQL関数など) 、または設定の永続的な変更を行う場合は、関数と集計にPARALLEL UNSAFEをマークする必要があります。 同様に、一時テーブル、クライアント接続状態、カーソル、準備済みステートメント、またはシステムがワーカー間で同期できないその他のバックエンドローカル状態にアクセスする場合、関数はPARALLEL RESTRICTEDとマークする必要があります。 たとえば、setseedrandomは、この最後の理由で並列制限されます。

一般に、関数が制限または安全でないときに安全であるとラベル付けされている場合、または実際に安全でないときに制限されているとラベル付けされている場合、並列クエリで使用されたときにエラーをスローしたり、誤った回答を生成したりする可能性があります。 C言語関数は、システムが任意のCコードからそれ自体を保護する方法がないため、誤ってラベル付けされた場合、理論的には完全に未定義の動作を示す可能性がありますが、ほとんどの場合、結果は他の関数よりも悪くありません。 疑わしい場合は、関数をUNSAFEとしてラベル付けするのがおそらく最善です。

並列ワーカー内で実行される関数が、たとえばクエリで参照されていないテーブルをクエリすることによって、リーダーによって保持されていないロックを取得した場合、それらのロックは、トランザクションの終了時ではなく、ワーカーの終了時に解放されます。 これを行う関数を作成し、この動作の違いが重要な場合は、PARALLEL RESTRICTEDなどの関数をマークして、リーダーでのみ実行するようにします。

クエリプランナは、優れたプランを得るために、クエリに含まれる並列制限された関数または集合体の評価を延期することを考慮しないことに留意されたい。 したがって、たとえば、特定のテーブルに適用されるWHERE句が並列制限されている場合、クエリプランナーは、プランの並列部分でそのテーブルのスキャンを実行することを考慮しません。 場合によっては、そのテーブルのスキャンをクエリの並列部分に含めて、WHERE句の評価を延期して、Gatherノードの上で行われるようにすることが可能です (おそらく効率的です) 。 ただし、プランナーはこれを行いません。

資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者。パラレル安全パラレル制限その者PARALLEL UNSAFECREATE AGGREGATE時,パラレル選択したコード安全制限付きその者安全でない

関数連連、修整担当者、修整担当者 (報復報復時修)例外入力入力に対応するPL/pgsqlPARALLEL UNSAFEクラス名, 関数関数を調べる質問、フィードバック端末、、、パラレル制限。たとえば、setseedランダム名前の変換元。

この状態では、C语言語が、UN、、C。この状態では、この状態では、C语言語が暗号化されます。UNSAFE

、非特許文献1に記載されているPARALLEL RESTRICTEDを使用してください。。

このデバイスは、WHERE子関数として機能します。WHERE子関数として機能します。GHERE GATER