如何找出导致 Azure SQL 数据库上数据 IO 峰值的原因?

ksp*_*rin 5 sql-server azure azure-sql-database

我有一个 Azure SQL 生产数据库,平均 DTU 使用率约为 10-20%,但是,我有时会遇到 DTU 峰值,使其达到 100% 以上。以下是过去 1 小时的示例:

在此输入图像描述

我意识到这可能是一个恶意查询,因此我切换到“查询性能洞察”选项卡,我发现过去 24 小时内的以下内容:

在此输入图像描述

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

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

在此输入图像描述

这似乎表明不存在使用大量数据 IO的查询。

我如何找出此数据 IO使用量来自何处?

最后,我看到“odd ball”查询 ( 7966 ) 列在Data IO 的前 5 个查询下,仅执行了 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)
Run Code Online (Sandbox Code Playgroud)

这个查询是什么?

这看起来不像我的应用程序创建/使用的任何查询。详细信息图表上的时间戳似乎与总体数据 IO 峰值(就在早上 6 点之前)的大致时间一致,这让我认为这个查询与所有这些都有关。

我可以使用其他工具来帮助隔离此问题吗?

The*_*war 3

查询正在更新统计信息..当此设置AUTO UPDATE STATISTICS 打开时会发生这种情况..应保持此设置并且您无法将其关闭..这是最佳实践..

\n\n

仅当您发现查询执行不佳且该查询的统计信息已关闭时,才应手动更新统计信息。

\n\n

下面还列出了 SQL 自动为您更新统计信息的一些规则

\n\n
    \n
  • 当没有行的表获得一行时
  • \n
  • 当500行改为小于500行的表时
  • \n
  • 当超过 500 行的表中发生 20% + 500 更改时
  • \n
\n\n

\xe2\x80\x98change\xe2\x80\x99 是指插入、更新或删除行。所以,是的,即使是自动创建的统计信息也会随着数据的变化而更新和维护。在最近的版本中,这些规则发生了一些变化,sql 可以更频繁地更新统计信息

\n\n

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

\n