Azure Synapse SQL の Distribution Advisor

適用対象: Azure Synapse Analytics 専用 SQL プール (旧称 SQL DW)

Azure Synapse SQL では、各テーブルは、顧客が選択した戦略 (ラウンド ロビン、ハッシュ分散、レプリケート) を使用して分散されます。 選択した分散戦略は、クエリのパフォーマンスに大きく影響する可能性があります。

Azure Synapse SQL の Distribution Advisor (DA) 機能は、顧客のクエリを分析し、クエリのパフォーマンスを向上させるためにテーブルに最適な分散戦略を推奨します。 アドバイザーによって考慮されるクエリは、顧客が提供することも、DMV で使用できる履歴クエリからプルすることもできます。

注意

Distribution Advisor は現在、Azure Synapse Analytics でプレビューの段階です。 プレビュー機能はテストのみを目的としているため、運用インスタンスや運用データでは使用しないでください。 Distribution Advisor はプレビュー機能のため、動作や機能が変更される可能性があります。 また、データが重要な場合は、テスト データのコピーも保持してください。 Distribution Advisor では、複数列の分散テーブルはサポートされていません。

前提条件

  • T-SQL ステートメント SELECT @@version を実行して、Azure Synapse Analytics 専用 SQL プールがバージョン 10.0.15669 以降であることを確認します。 それより前のバージョンの場合、新しいバージョンは、メンテナンス サイクル中にプロビジョニングされた専用 SQL プールに自動的に到達します。

  • アドバイザーを実行する前に、統計が利用可能で最新であることを確認してください。 統計の詳細については、テーブル統計の管理CREATE STATISTICSUPDATE STATISTICS に関する記事を参照してください。

  • SET RECOMMENDATIONS T-SQL コマンドを使用して、現在のセッションの Azure Synapse ディストリビューション アドバイザーを有効にします。

ワークロードを分析し、分散の推奨を生成する

次のチュートリアルでは、Distribution Advisor 機能を使用して顧客のクエリを分析し、最適な分散戦略を推奨するためのサンプル ユース ケースについて説明します。

Distribution Advisor では、ユーザー テーブルに対して実行されるクエリのみが分析されます。

1. Distribution Advisor のストアド プロシージャを作成する

アドバイザーを簡単に実行するために、データベースに 2 つの新しいストアド プロシージャを作成します。 GitHub からダウンロードできる CreateDistributionAdvisor_PublicPreview スクリプトを実行します。

コマンド 説明
dbo.write_dist_recommendation DA が分析するクエリを定義します。 クエリを手動で指定することも、sys.dm_pdw_exec_requests の実際のワークロードの最大 100 個の過去のクエリから読み取ることもできます。
dbo.read_dist_recommendation アドバイザーを実行し、推奨事項を生成します。

アドバイザーを実行する方法の例 を次に示します。

2a. DMV の過去のワークロードでアドバイザーを実行する

次のコマンドを実行して、分析と分散に関する推奨事項のために、ワークロード内の過去 100 件までのクエリを読み取ります。

EXEC dbo.write_dist_recommendation <Number of Queries max 100>, NULL
go
EXEC dbo.read_dist_recommendation;
go

DA によって分析されたクエリを確認するには、GitHub からダウンロードできる e2e_queries_used_for_recommendations.sql スクリプトを実行します。

2b. 選択したクエリに対してアドバイザーを実行する

dbo.write_dist_recommendation の最初のパラメーターは、0 に設定する必要があります。2 番目のパラメーターは、DA が分析する最大 100 個のクエリのセミコロン区切りリストです。 下の例では、セミコロンで区切られた select count (*) from t1;select * from t1 join t2 on t1.a1 = t2.a1; の 2 つのステートメントについて分散に関する推奨事項を確認します。

EXEC dbo.write_dist_recommendation 0, 'select count (*) from t1; select * from t1 join t2 on t1.a1 = t2.a1;'
go
EXEC dbo.read_dist_recommendation;
go

3. 推奨事項を表示する

dbo.read_dist_recommendation システム ストアド プロシージャは、実行が完了すると、次の形式で推奨事項を返します。

列名 説明
Table_name DA が分析したテーブル。 推奨事項の変更に関係なく、テーブルごとに 1 行。
Current_Distribution 現在のテーブル分散戦略。
Recommended_Distribution 推奨される分散。 これは、推奨される変更がない場合、Current_Distribution と同じになる場合があります。
Distribution_Change_Command 推奨事項を実装するための CTAS T-SQL コマンド。

4. アドバイスを実装する

  • Distribution Advisor によって提供された CTAS コマンドを実行して、推奨される分散戦略を使用する新しいテーブルを作成します。
  • 新しいテーブルで実行するようにクエリを変更します。
  • 古いテーブルと新しいテーブルに対してクエリを実行して、パフォーマンスが向上したかどうか比較します。

注意

Distribution Advisor の改善にご協力いただくために、こちらの簡単なアンケートにご記入ください。

トラブルシューティング

このセクションでは、一般的なトラブルシューティング シナリオと、発生する可能性がある一般的な間違いについて説明します。

1. アドバイザーの前回の実行からの古い状態

1a. 症状:

アドバイザーを実行すると、次のエラー メッセージが表示されます。

Msg 110813, Level 16, State 1, Line 1
Calling GetLastScalarResult() before executing scalar subquery.
1b. 軽減策:
  • 単一引用符 '' を使用して、選択したクエリに対してアドバイザーを実行していることを確認します。
  • SSMS で新しいセッションを開始し、アドバイザーを実行します。

2. アドバイザーの実行中のエラー

2a. 症状:

'result' ペインに以下の CommandToInvokeAdvisorString が表示されますが、以下の RecommendationOutput は表示されません。

たとえば、Command_to_Invoke_Distribution_Advisor 結果セットのみが表示されます。

Screenshot of the output of a T-SQL result showing the Command_to_Invoke_Distribution_Advisor.

しかし、テーブル変更の T-SQL コマンドを含む 2 つ目の結果セットがありません。

Screenshot of the output of a T-SQL result showing the Command_to_Invoke_Distribution_Advisor with a second resultset containing table change T-SQL commands.

2b. 軽減策:
  • 上の CommandToInvokeAdvisorString の出力を確認します。

  • 有効でない可能性があるクエリを削除します。このクエリは、手動で選択したクエリから、または DA によって考慮されるクエリWHERE を編集したときに DMV から追加された可能性があります。

3. 推奨事項出力の後処理中のエラー

3a. 症状:

次のエラー メッセージが表示されます。

Invalid length parameter passed to the LEFT or SUBSTRING function.
3b. 軽減策:

GitHub の最新バージョンのストアド プロシージャを使用していることを確認します。

Azure Synapse 製品グループへのフィードバック

Distribution Advisor の改善にご協力いただくために、こちらの簡単なアンケートにご記入ください。

この記事に記載されていない情報が必要な場合は、Azure Synapse に関する Microsoft Q&A 質問ページを検索して、他のユーザーや Azure Synapse Analytics 製品グループに質問することができます。

Microsoft では、このフォーラムを積極的に監視し、お客様からの質問に他のユーザーや Microsoft のスタッフが回答しているかどうかを確認しています。 Stack Overflow で質問したい方のために、Azure Synapse Analytics Stack Overflow フォーラムも用意しています。

機能に関する要望については、Azure Synapse Analytics のフィードバックに関するページを使用してください。 ご要望の追加や他の要望への投票は、最も需要のある機能に集中して取り組むために役立ちます。

次のステップ