我有一个Azure SQL生产数据库,平均运行的DTU使用率约为10-20%,但是,我得到的DTU峰值有时会高达100%。以下是过去1小时的样本:
我意识到这可能是一个胭脂查询,因此我切换到查询效果洞察标签,我在过去24小时内找到以下内容:
此图表对CPU使用率行有意义。查询 3780 占用CPU的大部分,正如我的应用程序所预期的那样。 整体DTU (红色)线似乎正确遵循这一点(减去峰值)。
但是,在 DTU组件图表中,我发现大的数据IO 峰值与整体DTU 峰值一致。切换到数据IO的 TOP 5查询,我看到以下内容:
这似乎表明没有使用大量数据IO 的查询。
如何找出 Data IO 用途的来源?
最后,我发现在数据IO 的 TOP 5查询下列出了这个“奇数球”查询( 7966 ),只执行了5次。选择它会显示以下内容:
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点)对齐,这使我认为此查询与所有这些有关。
我是否可以使用其他任何工具来帮助隔离此问题?
答案 0 :(得分:2)
查询正在更新统计信息...当此设置AUTO UPDATE STATISTICS
开启时会发生这种情况。这应该继续保存,您无法将其关闭..这是最佳做法..
只有当您发现查询效果不佳并且该查询的统计信息已关闭时,您才应手动更新统计信息。
以下是SQL将自动为您更新统计信息的一些规则
“更改”是指插入,更新或删除行。所以,是的,即使自动创建的统计信息也随着数据的变化而更新和维护。在最近的版本中,这些规则有一些变化,sql可以更频繁地更新统计数据
<强>参考文献:强>
https://www.sqlskills.com/blogs/erin/understanding-when-statistics-will-automatically-update/
答案 1 :(得分:1)
似乎查询是统计过程自动更新的一部分。为了减轻此过程对生产的影响,您可以使用Runbook定期更新统计信息和索引,如here所述。运行sp_updatestats以立即尝试减轻此过程的影响。