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 STATISTICSUPDATE 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 看到結果集。

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

但不包含包含資料表的第二個結果集會變更 T-SQL 命令:

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 輸出。

  • 拿掉可能不再有效的查詢,這些查詢可能已從手動選取的查詢或透過編輯 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 意見反應 頁面。 新增您的要求或向上投票的其他要求,可協助我們專注於最不需要的功能。

下一步