適用対象: Azure Synapse Analytics 専用 SQL プール (旧称 SQL DW)
Azure Synapse SQL では、各テーブルは、顧客が選択した戦略 (ラウンド ロビン、ハッシュ分散、レプリケート) を使用して分散されます。 選択した分散戦略は、クエリのパフォーマンスに大きく影響する可能性があります。
Azure Synapse SQL のディストリビューション アドバイザー (DA) 機能は、顧客のクエリを分析し、クエリのパフォーマンスを向上させるためにテーブルに最適な分散戦略を推奨します。 アドバイザーによって考慮されるクエリは、顧客が提供することも、DMV で使用可能な履歴クエリからプルすることもできます。
注
ディストリビューション アドバイザーは現在、Azure Synapse Analytics のプレビュー段階です。 プレビュー機能はテストのみを目的としており、運用インスタンスや運用データでは使用しないでください。 プレビュー機能として、ディストリビューション アドバイザーは動作または機能の変更を受ける可能性があります。 データが重要な場合は、テスト データのコピーも保持してください。 ディストリビューション アドバイザーは、複数列分散テーブルをサポートしていません。
前提条件
T-SQL ステートメント
SELECT @@versionを実行して、Azure Synapse Analytics 専用 SQL プールがバージョン 10.0.15669 以降であることを確認します。 バージョンが低い場合、新しいバージョンは、メンテナンス サイクル中にプロビジョニングされた専用 SQL プールに自動的に到達します。アドバイザーを実行する前に、統計が使用可能であり、最新であることを確認してください。 統計に関する詳細については、テーブル統計の管理、CREATE STATISTICS、およびUPDATE STATISTICSの記事を参照してください。
SET RECOMMENDATIONS T-SQL コマンドを使用して、現在のセッションに対して Azure Synapse ディストリビューション アドバイザーを有効にします。
ワークロードの分析と配布に関する推奨事項の生成
次のチュートリアルでは、Distribution Advisor 機能を使用して顧客のクエリを分析し、最適な配布戦略を推奨するためのサンプル ユース ケースについて説明します。
ディストリビューション アドバイザーは、ユーザー テーブルに対して実行されるクエリのみを分析します。
1. ディストリビューション アドバイザーストアド プロシージャを作成する
Advisor を簡単に実行するには、データベースに 2 つの新しいストアド プロシージャを作成します。 GitHub からダウンロードできるCreateDistributionAdvisor_PublicPreview スクリプトを実行します。
| 命令 | 説明 |
|---|---|
dbo.write_dist_recommendation |
DA が分析するクエリを定義します。 クエリは手動で指定することも、 sys.dm_pdw_exec_requestsの実際のワークロードから最大 100 件の過去のクエリから読み取ることもできます。 |
dbo.read_dist_recommendation |
Advisor を実行し、推奨事項を生成します。 |
Advisor を実行する方法の例 を次に示します。
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. 選択したクエリに対して Advisor を実行する
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 システム ストアド プロシージャは、実行が完了すると、次の形式で推奨事項を返します。
| 列名 | 説明 |
|---|---|
| テーブル名 | DA が分析したテーブル。 推奨事項の変更に関係なく、テーブルごとに 1 行。 |
| 現在の分布 | 現在のテーブル分散戦略。 |
| 推奨分布 | 推奨される配布。 これは、推奨される変更がない場合 Current_Distribution と同じにすることができます。 |
| Distribution_Change_Command (配布変更コマンド) | 推奨事項を実装する CTAS T-SQL コマンド。 |
4. アドバイスの実施
- 配布アドバイザーによって提供される CTAS コマンドを実行して、推奨される分散戦略を使用して新しいテーブルを作成します。
- 新しいテーブルで実行するようにクエリを変更します。
- 古いテーブルと新しいテーブルに対してクエリを実行して、パフォーマンスの向上を比較します。
注
配布アドバイザーの改善に役立てるために、この 簡単なアンケートに記入してください。
Troubleshooting
このセクションでは、一般的なトラブルシューティング シナリオと、発生する可能性がある一般的な間違いについて説明します。
1. Advisor の前回の実行からの古い状態
1a. 症状:
Advisor を実行すると、次のエラー メッセージが表示されます。
Msg 110813, Level 16, State 1, Line 1
Calling GetLastScalarResult() before executing scalar subquery.
1b. 緩和:
- 選択クエリで advisor を実行するために単一引用符 '' を使用していることを確認します。
- SSMS で新しいセッションを開始し、アドバイザーを実行します。
2. Advisor の実行中のエラー
2a. 症状:
[結果] ウィンドウには以下の CommandToInvokeAdvisorString が表示されますが、下の RecommendationOutput は表示されません。
たとえば、 Command_to_Invoke_Distribution_Advisor 結果セットのみが表示されます。
ただし、テーブル変更 T-SQL コマンドを含む 2 番目の結果セットではありません。
2b. 緩和:
上記の
CommandToInvokeAdvisorStringの出力を確認します。手動で選択したクエリまたは DMV から追加された可能性のある有効でない可能性があるクエリを削除するには、「
WHERE」の句を編集します。
3. 推奨出力の後処理中にエラーが発生しました
3a。 症状:
次のエラー メッセージが表示されます。
Invalid length parameter passed to the LEFT or SUBSTRING function.
3b。 緩和:
GitHub のストアド プロシージャの最新バージョンがあることを確認します。
GitHub からダウンロードできるe2e_queries_used_for_recommendations.sql スクリプト
GitHub からダウンロードできるCreateDistributionAdvisor_PublicPreview.sql スクリプト
Azure Synapse 製品グループのフィードバック
配布アドバイザーの改善に役立てるために、この 簡単なアンケートに記入してください。
この記事に記載されていない情報が必要な場合は、 Azure Synapse の Microsoft Q&A 質問ページ を検索して、他のユーザーや Azure Synapse Analytics 製品グループに質問を投稿できます。
このフォーラムを積極的に監視して、他のユーザーまたはいずれかのユーザーが質問に回答することを確認します。 Stack Overflow について質問したい場合は、 Azure Synapse Analytics Stack Overflow フォーラムも用意されています。
機能要求の場合は、 Azure Synapse Analytics フィードバック ページを 使用します。 要求の追加や他の要求のアップ投票は、最も需要の高い機能に集中するのに役立ちます。