Azure Synapse SQL 中的散發建議程式
適用於: Azure Synapse Analytics 專用 SQL 集區(先前稱為 SQL DW)
在 Azure Synapse SQL 中,每個數據表都是使用客戶選擇的策略來散發(迴圈配置資源、哈希分散式、復寫的)。 選擇的散發策略可能會大幅影響查詢效能。
Azure Synapse SQL 的散發建議程式 (DA) 功能會分析客戶查詢,並建議數據表的最佳散發策略以改善查詢效能。 建議程式要考慮的查詢可由客戶提供,或從 DMV 中提供的歷史查詢提取。
注意
散發建議程式目前為 Azure Synapse Analytics 預覽版。 預覽功能僅供測試之用,不應用於生產執行個體或生產資料。 作為預覽功能,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 預存程式
若要輕鬆地執行建議程式,請在資料庫中建立兩個新的預存程式。 執行 可從 GitHub 下載的CreateDistributionAdvisor_PublicPreview腳稿:
Command | 描述 |
---|---|
dbo.write_dist_recommendation |
定義 DA 將分析的查詢。 您可以手動提供查詢,或從sys.dm_pdw_exec_requests中實際工作負載讀取最多 100 個過去的查詢。 |
dbo.read_dist_recommendation |
執行建議程式並產生建議。 |
以下是如何 執行 Advisor 的範例。
2a. 在 DMV 中的過去工作負載上執行 Advisor
執行下列命令,以讀取工作負載中最後 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
,而第二個參數是 DA 將分析最多 100 個查詢的分號分隔清單。 在下列範例中,我們想要查看兩個以分號分隔的語句分佈建議, select count (*) from t1;
以及 select * from t1 join t2 on t1.a1 = t2.a1;
。
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 分析的數據表。 不論建議的變更為何,每個數據表各有一行。 |
Current_Distribution | 目前的數據表散發策略。 |
Recommended_Distribution | 建議的散發。 這與建議的變更可能相同 Current_Distribution 。 |
Distribution_Change_Command | 要實作建議的 CTAS T-SQL 命令。 |
4. 實作建議
- 執行 Distribution Advisor 提供的 CTAS 命令,以使用建議的散發策略建立新的數據表。
- 修改查詢以在新數據表上執行。
- 在舊數據表和新數據表上執行查詢,以比較效能改進。
注意
若要協助我們改善散發建議程式,請填寫此 快速問卷。
疑難排解
本節包含常見的疑難解答案例和您可能會遇到的常見錯誤。
1.先前執行 Advisor 的過時狀態
1a. 徵兆:
您在執行 Advisor 時看到此錯誤訊息:
Msg 110813, Level 16, State 1, Line 1
Calling GetLastScalarResult() before executing scalar subquery.
1b. 避免方法:
- 確認您使用單引號 '' 在選取的查詢上執行 Advisor。
- 在 SSMS 中啟動新的工作階段,然後執行建議程式。
2.執行建議程式期間發生錯誤
2a. 徵兆:
[結果] 窗格如下所示 CommandToInvokeAdvisorString
,但未顯示 RecommendationOutput
下列內容。
例如,您只會 Command_to_Invoke_Distribution_Advisor
看到結果集。
但不包含包含資料表的第二個結果集會變更 T-SQL 命令:
2b. 避免方法:
檢查上述的
CommandToInvokeAdvisorString
輸出。拿掉可能不再有效的查詢,這些查詢可能已從手動選取的查詢或透過編輯
WHERE
子句從 DMV 新增: DA 所考慮的查詢。
3.建議輸出后處理期間發生錯誤
3a. 徵兆:
您會看到下列錯誤訊息。
Invalid length parameter passed to the LEFT or SUBSTRING function.
3b. 避免方法:
請確定您擁有 GitHub 中最新版的預存程式:
Azure Synapse 產品群組意見反應
若要協助我們改善散發建議程式,請填寫此 快速問卷。
如果您需要本文中未提供的資訊,請搜尋 Azure Synapse 的 Microsoft Q&A 問題頁面,是您向其他使用者和 Azure Synapse Analytics 產品群組提出問題的地方。
我們積極監視此論壇,以確保您的問題是由其他使用者或我們中的使用者回答。 如果您想要在 Stack Overflow 上提出問題,我們也會有 Azure Synapse Analytics Stack Overflow 論壇。
針對功能要求,請使用 Azure Synapse Analytics 意見反應 頁面。 新增您的要求或向上投票的其他要求,可協助我們專注於最不需要的功能。