你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于: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 分发顾问。
分析工作负荷并生成分配建议
以下教程介绍了使用分发顾问功能分析客户查询并推荐最佳分发策略的示例用例。
分发顾问仅分析用户表上运行的查询。
1.创建分发顾问存储过程
若要轻松运行顾问,请在数据库中创建两个新的存储过程。 运行 可从 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,第二个参数是 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 相同,如果没有建议进行更改。 |
| 分布更改命令 | 用于实现建议的 CTAS T-SQL 命令。 |
4. 实施建议
- 运行分发顾问提供的 CTAS 命令,以使用建议的分发策略创建新表。
- 修改查询以在新表上运行。
- 对旧表和新表执行查询,以比较性能改进。
注释
为了帮助我们改进分发顾问,请填写此 快速调查。
故障排除
本部分包含可能会遇到的常见故障排除方案和常见错误。
1. 顾问上一次运行的过时状态
1a. 症状:
运行顾问时会看到以下错误消息:
Msg 110813, Level 16, State 1, Line 1
Calling GetLastScalarResult() before executing scalar subquery.
1b. 缓解:
- 验证是否使用单引号 '' 对选择的查询运行了顾问。
- 在 SSMS 中启动新会话并运行顾问。
2. 运行建议工具时出现错误
2a. 症状:
“结果”窗格显示下面的 CommandToInvokeAdvisorString,但不显示下面的 RecommendationOutput。
例如,您只能看到Command_to_Invoke_Distribution_Advisor结果集。
但不包括包含表更改 T-SQL 命令的第二个结果集:
2b. 缓解:
检查上述的输出结果
CommandToInvokeAdvisorString。删除可能不再有效的查询,这些查询可能是在此处从手动选择的查询添加的,也可能是在 DA 考虑的查询中通过编辑
WHERE子句从 DMV 中添加的。
3. 建议输出后期处理期间出错
3a. 症状:
会看到以下错误消息。
Invalid length parameter passed to the LEFT or SUBSTRING function.
3b. 缓解:
确保从 GitHub 获取最新版本的存储过程:
Azure Synapse 产品组反馈
为了帮助我们改进分发顾问,请填写此 快速调查。
如果需要本文中未提供的信息,请在 Azure Synapse 的Microsoft问答页 中搜索,以便向其他用户和 Azure Synapse Analytics 产品组提出问题。
我们积极监视此论坛,以确保你的问题由另一个用户或我们之一回答。 如果想要在 Stack Overflow 上提出问题,我们还有 一个 Azure Synapse Analytics Stack Overflow 论坛。
对于功能请求,请使用 Azure Synapse Analytics 反馈 页。 添加请求或给其他请求投票有助于我们专注于最受欢迎的功能。