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 STATISTICS、UPDATE 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
結果セットのみが表示されます。
しかし、テーブル変更の T-SQL コマンドを含む 2 つ目の結果セットがありません。
2b. 軽減策:
上の
CommandToInvokeAdvisorString
の出力を確認します。有効でない可能性があるクエリを削除します。このクエリは、手動で選択したクエリから、または DA によって考慮されるクエリで
WHERE
を編集したときに DMV から追加された可能性があります。
3. 推奨事項出力の後処理中のエラー
3a. 症状:
次のエラー メッセージが表示されます。
Invalid length parameter passed to the LEFT or SUBSTRING function.
3b. 軽減策:
GitHub の最新バージョンのストアド プロシージャを使用していることを確認します。
GitHub からダウンロードできる e2e_queries_used_for_recommendations.sql スクリプト
GitHub からダウンロードできる CreateDistributionAdvisor_PublicPreview スクリプト
Azure Synapse 製品グループへのフィードバック
Distribution Advisor の改善にご協力いただくために、こちらの簡単なアンケートにご記入ください。
この記事に記載されていない情報が必要な場合は、Azure Synapse に関する Microsoft Q&A 質問ページを検索して、他のユーザーや Azure Synapse Analytics 製品グループに質問することができます。
Microsoft では、このフォーラムを積極的に監視し、お客様からの質問に他のユーザーや Microsoft のスタッフが回答しているかどうかを確認しています。 Stack Overflow で質問したい方のために、Azure Synapse Analytics Stack Overflow フォーラムも用意しています。
機能に関する要望については、Azure Synapse Analytics のフィードバックに関するページを使用してください。 ご要望の追加や他の要望への投票は、最も需要のある機能に集中して取り組むために役立ちます。