确定所需的统计信息 - Azure SQL 数据仓库

Identifying needed statistics - Azure SQL Data Warehouse

是否有任何提示或指令可以与 Azure SQL 数据仓库上的查询的 EXPLAIN 一起使用,从而 return 推荐优化程序不可用的统计信息?或者有没有可以分析工作负载并提出任何建议的工具。

今天,没有。现在的建议是在每一列上创建统计信息,因为创建最佳并行查询计划需要这些信息(即如何在节点之间移动数据以 return 结果,因为它是 MPP 架构)。

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-best-practices#maintain-statistics

也可以在此处找到有关如何编写脚本的示例(示例 H)。

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-statistics#examples-create-statistics

如您所知,应该创建统计信息(根据this article):

on columns involved in JOINs, GROUP BY, HAVING and WHERE clauses.

目前还没有工具可以做到这一点,但如果您可以访问 EXPLAIN 计划,它们会为您提供某些信息。例如,shuffle_columns 元素列出了 SHUFFLE_MOVE:

中涉及的所有列
<shuffle_columns>col;</shuffle_columns>

以及无数其他信息。查看我对 Azure SQL 数据仓库计划 .

所做的注释

最后,(我还没有真正做到这一点,我只是在考虑这样做),您可以在 SQL Server 2016 上设置数据库的副本,请记住语法差异(例如分布、缺少唯一索引等)。这将使您能够访问某些有用的资源,例如执行计划,包括索引建议,以及某些告诉您使用了哪些统计信息的跟踪标志。我的意思是数据库引擎和索引确实不同,所以我不知道这可能有多值得。如果我对此有进一步的思考,我会 post 回来。我确实发现 "Why is this query going slow?" 这个问题比普通的 "box product" SQL 服务器更难回答,因为工具还不够成熟。