【发布时间】:2017-11-15 16:24:09
【问题描述】:
我有一个 Azure SQL 生产数据库,它的平均 DTU 使用率约为 10-20%,但是,我的 DTU 峰值有时会超过 100%。以下是过去 1 小时的示例:
我意识到这可能是一个恶意查询,因此我切换到 Query Performance Insight 标签,并在过去 24 小时内找到以下内容:
此图表对于 CPU 使用率线很有意义。正如我的应用程序所预期的那样,查询 3780 占用了 CPU 的大部分时间。 Overall DTU(红色)线似乎正确地遵循了这一点(减去尖峰)。
但是,在 DTU 组件 图表中,我可以看到与 总体 DTU 峰值一致的较大 数据 IO 峰值出现。切换到 Data IO 的 TOP 5 查询,我看到以下内容:
这似乎表明没有使用大量数据 IO 的查询。
我如何找出这个Data IO使用的来源?
最后,我看到 Data 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 点之前),这让我认为这个查询与所有这些有关。
我可以使用任何其他工具来帮助隔离此问题吗?
【问题讨论】:
-
您是否尝试过关闭 AUTO_UPDATE_STATISTICS?我相信这是一个更新统计元数据的内部 SQL 过程。
-
@DanielG 我还没有尝试过。我可以尝试使用
sp_autostats禁用表dbo.Ciphers上的统计信息,看看这是否会改变任何东西,尽管我不确定这会对那个表产生什么影响,因为dbo.Ciphers是应用程序中非常高的流量表。
标签: sql-server azure azure-sql-database