【问题标题】:Identifying needed statistics - Azure SQL Data Warehouse确定所需的统计信息 - Azure SQL 数据仓库
【发布时间】:2017-05-08 15:23:04
【问题描述】:

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

【问题讨论】:

标签: azure-sqldw


【解决方案1】:

今天,没有。目前的建议是为每一列创建统计信息,因为这些是创建最佳并行查询计划所必需的(即如何在节点之间移动数据以返回结果,因为它是 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

【讨论】:

  • 非常有帮助的答案 - 我试图了解默认情况下表是列存储时对统计信息的需求。对我来说进入分布式思维方式很重要。
  • @Anthony,如果建议在每一列上创建统计信息,那么为什么 Azure SQL DW 不创建自己?天性不做的原因是什么?
  • 看来工程部门正在为此努力,请随时添加您的 +1 feedback.azure.com/forums/307516-sql-data-warehouse/suggestions/…
【解决方案2】:

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

关于 JOIN、GROUP BY、HAVING 和 WHERE 子句中涉及的列。

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

<shuffle_columns>col;</shuffle_columns>

以及无数其他信息。查看我对 Azure SQL 数据仓库计划 here 所做的注释。

最后,(我实际上并没有这样做,我只是在考虑这样做),您可以在 SQL Server 2016 上设置数据库的副本,记住语法差异(例如分布,缺乏唯一索引等)。这将使您可以访问某些有用的资源,例如执行计划,包括索引建议,以及某些告诉您使用了哪些统计信息的跟踪标志。我的意思是数据库引擎和索引确实不同,所以我不知道这有多大价值。如果我对此有进一步的想法,我会回帖。我确实发现了“为什么这个查询会变慢?”这个问题。在这个平台上回答普通的“盒装产品”SQL Server 要困难得多,因为这些工具还不够成熟。

【讨论】:

  • 我真的很想看看结果,但是,我和你一样持怀疑态度,因为 SQL DW 和 PDW 中的统计数据不仅用于它们的传统目的,而且还用于估计并行查询计划的数据移动。
  • 另外值得一提的是,建议以所有列的统计信息为起点,按需配对,以确保最优的并行查询计划。即使列不在 JOIN、GROUP BY、HAVING 或 WHERE 子句中,如果将它们排除在外,您也会面临在平台中的节点之间执行不必要或非最佳数据移动的风险。
猜你喜欢
  • 2017-02-26
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2016-05-01
相关资源
最近更新 更多