【问题标题】:Long running prepare statements on Azure SQL Data WarehouseAzure SQL 数据仓库上长时间运行的准备语句
【发布时间】:2016-12-22 05:30:57
【问题描述】:

我正在 DWU 1000 的 Azure SQL 数据仓库数据库上运行第 3 方应用程序的功能测试。通过以下方式查看当前活动:

sys.dm_pdw_exec_requests

我明白了:

  • 准备语句需要 30 多秒,
  • NULL 语句最多需要 25 秒,
  • 编译语句最多需要 60 秒,
  • 解释耗时超过 60 秒的语句,并且
  • 从空表中选择 count(1) 需要 60 多秒。

如何识别所涉及的瓶颈?

测试已经运行了几个小时,Azure 门户显示平均消耗的 DWU 很少,所以我怀疑修改 DWU 会有什么不同。

第三方应用程序具有工作负载管理功能,因此我指定了与 ADW 数据库的连接限制为 30 个(了解数据库本身只有 32 个会话处于活动状态。)

数据库中有大约 1,800 个表和大约 350 个视图,跨越 29 个模式(每个 information_schema.tables)。

我处于功能测试模式,所以查询中涉及的很多表还没有加载,但是已经对测试范围内的每个表的每一列都创建了统计信息。

测试中使用了一个用户 ID。它在 smallrc 中。

【问题讨论】:

  • 发布 SQL 语句、解释计划、涉及的表的 DDL 及其行数。如果需要,请匿名。
  • DMV 只显示以下命令:exec [sp_prepare] \@P1 OUT, \@P2, \@P3, \@P4" 和其他一些排列。
  • 你能更全面地描述你的测试吗?例如,您是否尝试运行大量并发用户?如您所知,Azure SQL 数据仓库只能有 32 个并发查询,但在使用较大的资源类(例如mediumrc,largerc,xlargerc。然后查询将排队。如果这是问题,提高 DWU 会有所帮助。
  • 另一个观察结果是,测试中使用的用户 ID 在 small_rc 中。在 DWU 1000 上,这应该允许完整的 32 个活动会话,每个会话使用 40 个可用并发槽中的一个槽。当我查看 sys.dm_pdw_exec_requests 时,我只看到 5-10 个具有非空 resource_class 的请求。
  • 是的,这是真的。感谢您获得该信息,希望您能明白我为什么要它。考虑通过门户打开支持案例,向此线程报告任何发现。

标签: azure-sqldw


【解决方案1】:

看看你的表 - 在查询中?确保连接、分组依据和排序依据中的所有列都有最新的统计信息。

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

【讨论】:

  • 已收集单列统计信息。我了解需要多列统计才能获得最佳计划,但此时我还没有加载数据,只是想对第 3 方应用程序生成的 SQL 进行功能测试。如果统计数据不够“完整”,那会如何影响 PREPARE 和 EXPLAIN 语句的运行时间?
猜你喜欢
  • 2021-03-04
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多