如何确定导致Azure SQL数据库上的数据IO峰值的原因是什么?

时间:2017-11-14 17:28:37

标签: sql-server azure azure-sql-database

我有一个Azure SQL生产数据库,平均运行的DTU使用率约为10-20%,但是,我得到的DTU峰值有时会高达100%。以下是过去1小时的样本:

enter image description here

我意识到这可能是一个胭脂查询,因此我切换到查询效果洞察标签,我在过去24小时内找到以下内容:

enter image description here

此图表对CPU使用率行有意义。查询 3780 占用CPU的大部分,正如我的应用程序所预期的那样。 整体DTU (红色)线似乎正确遵循这一点(减去峰值)。

但是,在 DTU组件图表中,我发现大的数据IO 峰值与整体DTU 峰值一致。切换到数据IO的 TOP 5查询,我看到以下内容:

enter image description here

这似乎表明没有使用大量数据IO 的查询。

如何找出 Data IO 用途的来源?

最后,我发现在数据IO 的 TOP 5查询下列出了这个“奇数球”查询( 7966 ),只执行了5次。选择它会显示以下内容:

enter image description here

SELECT StatMan([SC0], [SC1], [SC2], [SB0000])
    FROM (SELECT TOP 100 PERCENT [SC0], [SC1], [SC2], step_direction([SC0]) over (order by NULL) AS [SB0000]
    FROM (SELECT [UserId] AS [SC0], [Type] AS [SC1], [Id] AS [SC2] FROM [dbo].[Cipher] TABLESAMPLE SYSTEM (1.828756e+000 PERCENT)
    WITH (READUNCOMMITTED) ) AS _MS_UPDSTATS_TBL_HELPER
ORDER BY [SC0], [SC1], [SC2], [SB0000] ) AS _MS_UPDSTATS_TBL 
OPTION (MAXDOP 16)

这是什么查询?

这看起来与我的应用程序创建/使用的任何查询不同。详细信息图表上的时间戳似乎与整体数据IO峰值的大致时间(早于早上6点)对齐,这使我认为此查询与所有这些有关。

我是否可以使用其他任何工具来帮助隔离此问题?

2 个答案:

答案 0 :(得分:2)

查询正在更新统计信息...当此设置AUTO UPDATE STATISTICS开启时会发生这种情况。这应该继续保存,您无法将其关闭..这是最佳做法..

只有当您发现查询效果不佳并且该查询的统计信息已关闭时,您才应手动更新统计信息。

以下是SQL将自动为您更新统计信息的一些规则

  • 当没有行的表格获得一行
  • 当500行更改为小于500行的表
  • 在大于500行的表格中更改20%+ 500

“更改”是指插入,更新或删除行。所以,是的,即使自动创建的统计信息也随着数据的变化而更新和维护。在最近的版本中,这些规则有一些变化,sql可以更频繁地更新统计数据

<强>参考文献:
https://www.sqlskills.com/blogs/erin/understanding-when-statistics-will-automatically-update/

答案 1 :(得分:1)

似乎查询是统计过程自动更新的一部分。为了减轻此过程对生产的影响,您可以使用Runbook定期更新统计信息和索引,如here所述。运行sp_updatestats以立即尝试减轻此过程的影响。