翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Redshift クエリプランの EXPLAIN データ再分散
結合ステップ中は、スライスでローカルに保存されていないデータを操作する必要があります。ネットワーク送信 (コンピューティングノード間のデータの移動) は、最も高価なクエリオペレーションです。
結合の EXPLAIN 出力では、結合を容易にするためにクラスター周囲にデータを移動する方法も指定します。このデータの移動は、ブロードキャストまたは再分散のいずれかとすることができます。
-
ブロードキャストでは、結合の一方の側からのデータ値は、各コンピューティングノードから他方の各コンピューティングノードにコピーされ、各コンピューティングノードはデータの完全なコピーで終了します。
-
再分散では、特定のデータ値は現在のスライスから新しいスライス (別のノードにある場合があります) に送信されます。通常、データは再分散され、結合で該当する他方のテーブルの分散キーと一致します (その分散キーが結合する列の 1 つである場合)。いずれのテーブルにも、結合する列の 1 つに分散キーがない場合、両方のテーブルが分散されるか、内部テーブルが各ノードにブロードキャストされます。
また、EXPLAIN 出力は、内部テーブルと外部テーブルも参照します。
-
内部テーブルが最初にスキャンされ、クエリプランの下部付近に表示されます。内部テーブルは、ビルドテーブル内で一致する行をプローブするテーブルです。通常、メモリに保持される内部テーブルはハッシュのソーステーブルであり、可能な場合は、結合される 2 つのテーブルのうち小さい方になります。
-
外部テーブルは、内部テーブルに対して一致させる行のソースです。通常、このテーブルはディスクから読み取られます。クエリオプティマイザは、前回実行した
ANALYZEコマンドから生成されたデータベース統計情報に基づいて内部テーブルと外部テーブルを選択します。クエリのFROM句のテーブルの順序では、どのテーブルが内部でどのテーブルが外部かは決まりません。
結合を容易にするためにデータを移動する方法を特定するには、クエリプランで次の属性を使用します。
-
DS_BCAST_INNER – 内部結合テーブル全体のコピーがすべてのコンピューティングノードにブロードキャストされていることを示します。
-
DS_DIST_ALL_NONE – 内部テーブルは
DISTSTYLE ALLを使用してすべてのノードにすでに分散されているため、再分散は不要です。テーブル全体が各コンピューティングノードに配置されます。 -
DS_DIST_NONE – 対応するスライスがコンピューティングノードにコロケーションされているため、再分散は不要です。これは、ネットワーク転送がないため、最も効率的なオプションとなります。
-
DS_DIST_INNER – 内部結合テーブルが再分散されることを示します。内部テーブルがはるかに小さいか、頻繁に更新されない場合は、そのテーブルを
DISTSTYLE ALLに変更することを検討してください。 -
DS_DIST_OUTER – 外部結合テーブルが再分散されることを示します。外部テーブルがはるかに小さいか、頻繁に更新されない場合は、そのテーブルを
DISTSTYLE ALLに変更することを検討してください。 -
DS_DIST_ALL_INNER – 結合テーブルが
DISTSTYLE ALLを使用しているため、内部結合テーブルが単一のノードに送信されていることを示します。この結合は単一ノードで実行され、遅延する可能性があります。 -
DS_DIST_BOTH – 結合内の両方のテーブルがすべてのノードに再分散されていることを示します。これは考えられる最悪のオプションです。