プランナーは、クエリに含まれる操作をparallel safe、parallel restricted、またはparallel unsafeのいずれかに分類します。 並列セーフ操作は、並列クエリの使用と競合しない操作です。 並列制限操作は、並列ワーカーでは実行できませんが、並列クエリの使用中にリーダーで実行できる操作です。 したがって、並列制限操作は、Gather
ノードまたはGather Merge
ノードの下では発生しませんが、そのようなノードを含むプランの他の場所で発生する可能性があります。 並列安全でない操作は、並列クエリが使用されている間は実行できず、リーダーでも実行できない操作です。 クエリにparallel unsafeのものが含まれている場合、そのクエリに対してparallelクエリは完全に無効になります。
次の操作は常に並列制限されます。
共通テーブル式 (CTE) のスキャン。
一時テーブルのスキャン。
外部データラッパーに
IsForeignScanParallelSafe
APIがない限り、外部テーブルのスキャンを行います。InitPlan
がアタッチされているノードを計画します。関連付けられた
SubPlan
を参照するノードを計画します。
関数と集計の並列ラベリング
プランナは、ユーザ定義関数または集合体が並列安全、並列制限、または並列安全でないかどうかを自動的に決定することはできない。 一般に、これは停止問題と同等であり、したがって不可能です。 実行できると考えられる単純な関数であっても、これは高価でエラーが発生しやすいため、試行しません。 代わりに、すべてのユーザー定義関数は、他にマークが付けられない限り、並列安全でないと見なされます。 CREATE FUNCTIONまたはALTER FUNCTIONを使用する場合、PARALLEL SAFE
、PARALLEL RESTRICTED
、またはPARALLEL UNSAFE
を適宜指定してマーキングを設定できます。 CREATE AGGREGATEを使用する場合、PARALLEL
オプションは、対応する値としてSAFE
、RESTRICTED
、またはUNSAFE
で指定できます。
データベースへの書き込み、シーケンスへのアクセス、一時的なトランザクション状態の変更 (エラーを検出するためにEXCEPTION
ブロックを確立するPL/pgSQL関数など) 、または設定の永続的な変更を行う場合は、関数と集計にPARALLEL UNSAFE
をマークする必要があります。 同様に、一時テーブル、クライアント接続状態、カーソル、準備済みステートメント、またはシステムがワーカー間で同期できないその他のバックエンドローカル状態にアクセスする場合、関数はPARALLEL RESTRICTED
とマークする必要があります。 たとえば、setseed
とrandom
は、この最後の理由で並列制限されます。
一般に、関数が制限または安全でないときに安全であるとラベル付けされている場合、または実際に安全でないときに制限されているとラベル付けされている場合、並列クエリで使用されたときにエラーをスローしたり、誤った回答を生成したりする可能性があります。 C言語関数は、システムが任意のCコードからそれ自体を保護する方法がないため、誤ってラベル付けされた場合、理論的には完全に未定義の動作を示す可能性がありますが、ほとんどの場合、結果は他の関数よりも悪くありません。 疑わしい場合は、関数をUNSAFE
としてラベル付けするのがおそらく最善です。
並列ワーカー内で実行される関数が、たとえばクエリで参照されていないテーブルをクエリすることによって、リーダーによって保持されていないロックを取得した場合、それらのロックは、トランザクションの終了時ではなく、ワーカーの終了時に解放されます。 これを行う関数を作成し、この動作の違いが重要な場合は、PARALLEL RESTRICTED
などの関数をマークして、リーダーでのみ実行するようにします。
クエリプランナは、優れたプランを得るために、クエリに含まれる並列制限された関数または集合体の評価を延期することを考慮しないことに留意されたい。 したがって、たとえば、特定のテーブルに適用されるWHERE
句が並列制限されている場合、クエリプランナーは、プランの並列部分でそのテーブルのスキャンを実行することを考慮しません。 場合によっては、そのテーブルのスキャンをクエリの並列部分に含めて、WHERE
句の評価を延期して、Gather
ノードの上で行われるようにすることが可能です (おそらく効率的です) 。 ただし、プランナーはこれを行いません。
資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者、資格決定担当者。パラレル安全
、パラレル制限
その者PARALLEL UNSAFE
CREATE AGGREGATE時,パラレル
選択したコード安全
、制限付き
その者安全でない
。
関数連連、修整担当者、修整担当者 (報復報復時修)例外
入力入力に対応するPL/pgsqlPARALLEL UNSAFE
クラス名, 関数関数を調べる質問、フィードバック端末、、、パラレル制限
。たとえば、setseed
和ランダム
名前の変換元。
この状態では、C语言語が、UN、、C。この状態では、この状態では、C语言語が暗号化されます。UNSAFE
。
、非特許文献1に記載されているPARALLEL RESTRICTED
を使用してください。。
このデバイスは、WHERE
子関数として機能します。WHERE
子関数として機能します。GHERE GATER
。