ORACLE-HINTのpq_distributeについて説明します



Explain Pq_distribute Oracle Hint



今回はあなたに新しいヒントを説明します:

pq_distribute(tablename、outer_distribution inner_distribution)
個人翻訳:並列接続のパフォーマンスを向上させるための並列クエリのヒント
公式ドキュメント:
PQ_DISTRIBUTEヒントは、結合されたテーブルの行をプロデューサー間で分散する方法をオプティマイザーに指示します
およびコンシューマクエリサーバー。このような分散により、並列結合操作のパフォーマンスを向上させることができます。
名前が示すようにtablename
outside_distribution外輪テーブルの配布状況
inner_distribution内部ループテーブルの配布ステータス



配布状態の値は、HASH、BROADCAST、PARTITION、およびNONEです。
次の6つの結合されたテーブル分布のみが有効です。

1.【HASH、HASH】
接続キーのハッシュ関数を使用して、各テーブルの行をコンシューマクエリサーバーにマップします。マッピングが完了した後、
各クエリサーバーは、結果パーティションのペア間の接続を実行します。この分散は、テーブルのサイズが同等であり、結合操作がハッシュ結合またはソートマージ結合を介して実装されている場合に推奨されます。
2.ブロードキャスト、なし
外部テーブルのすべての行は、各クエリサーバーにブロードキャストされます。内部テーブルの行はランダムに分割されます。
内側のテーブルに比べて外観が非常に小さい場合は、この分布をお勧めします。原則として、内部テーブルのサイズに外部テーブルのサイズよりも大きいクエリサーバーの数を掛ける場合は、この分布を使用します。
3.なし、放送
内部テーブルのすべての行は、各ユーザークエリサーバーにブロードキャストされます。外側の行はランダムに分割されます。
この分布は、内側のテーブルが外側のテーブルに比べて非常に小さい場合に推奨されます。原則として、内部テーブルのサイズに外部テーブルのサイズよりも小さいクエリサーバーの数を掛ける場合は、この分布を使用します。
4.なし、パーティション
外側のテーブルのパーティションを使用して、内側のテーブルの行をマップします。外部テーブルは、接続キーでパーティション化する必要があります。この分散は、外部テーブルのパーティションの数がクエリサーバーの数と等しいかほぼ等しい場合、たとえば14パーティションと15クエリサーバーの場合に推奨されます。



注:外部表がパーティション化されていないか、パーティション化キーで半分になっていない場合、オプティマイザーはこのプロンプトを無視します。
5.なし、パーティション
外側のテーブルのパーティションを使用して、内側のテーブルの行をマップします。外部テーブルは、接続キーでパーティション化する必要があります。この分散は、外部テーブルのパーティションの数がクエリサーバーの数と等しいかほぼ等しい場合、たとえば14パーティションと15クエリサーバーの場合に推奨されます。

注:外部表がパーティション化されていないか、パーティション化キーで半分になっていない場合、オプティマイザーはこのプロンプトを無視します。
6.なし、なし
各クエリサーバーは、テーブルごとに1つずつ、一致するパーティションのペア間で結合操作を実行します。両方のテーブルは、接続キーで均等に分割する必要があります。

公式文書ケース:
たとえば、ハッシュ結合を使用する2つのテーブルrとsが与えられた場合、次のクエリにはハッシュ分散を使用するヒントが含まれます。



SELECT / * + ORDERED PQ_DISTRIBUTE(s HASH、HASH)USE_HASH(s)* / column_list
からr、s
WHERE rc = sc

外部テーブルrをブロードキャストするには、クエリは次のとおりです。

SELECT / * + ORDERED PQ_DISTRIBUTE(s BROADCAST、NONE)USE_HASH(s)* / column_list
からr、s
WHERE rc = sc

私は実際にケース(ネガティブマテリアル)に遭遇しました:

(機密保持を含み、いくつかの変更が加えられ、誰もが主にHINTと実行計画を見ることができます):

実行計画が明らかに間違っていることがわかります。実際には、NLは再びハッシュされ、時間は132以上になります(許可されていませんが、数が多すぎるため、問題があるはずです)
このSQLを書いたプレイヤーは、明らかに厄介な操作です。ヒントが非常にNBであるように見えるので、実際の効果は240秒以上です。

最初にヒントを削除し、ビットマップインデックス変換があることを確認しますが、速度は100S +に達します

ビットマップインデックス変換をオフにし、

実際に5S +を実行すると、速度が大幅に向上しました。

特に並列処理に関しては、ヒントを気軽に再生するべきではないことがわかります。良い効果を追加するのではなく、警告である場合があります。