在应用程序对服务器进行查询时,在这种过载状态下似乎仍然能够快速运行。
我可以将服务器从S2扩展到任何规模(例如S3),然后再缩小回S2,它似乎可以清除掉它所卡住的状态。但是几个小时后,它又会重复相同的过载状态循环。另一个奇怪的事情是,我注意到如果我将这个服务器一直运行在S3计划(100 DTU)上,我就没有观察到这种行为。它似乎只在我将数据库缩小到S2计划(50 DTU)时发生。在S3计划中,我的DTU使用率始终保持在5-10%。显然是被低效利用了。
我已经查看了Azure SQL查询报告,寻找异常查询,但实际上并没有看到什么异常,并且显示我的查询使用了我预期的资源。
从这里我们可以看到,所有的使用情况都来自于Data IO。如果我将这里的性能报告更改为按最大值显示顶部的Data IO查询,我们会看到这样的结果: 看这些长时间运行的查询似乎指向统计更新。并没有什么来自我的应用程序的运行。例如,查询16302显示: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], [OrganizationId] AS [SC1], [Id] AS [SC2] FROM [dbo].[Cipher] TABLESAMPLE SYSTEM (1.250395e+000 PERCENT) WITH (READUNCOMMITTED) ) AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SC2], [SB0000] ) AS _MS_UPDSTATS_TBL OPTION (MAXDOP 16)
但另一方面,报告还显示这些查询仅占服务器数据IO使用的很小比例(<4%)。作为常规维护的一部分,我每周还会对整个数据库进行统计更新(和索引重建)。
这里还有另一个报告,显示了在高资源使用事件期间仅覆盖几个小时的时间段内的最大数据IO查询。
正如我们所看到的,没有任何查询报告重要的数据IO使用情况。
我还运行了数据库上的sp_who2
和sp_whoisacive
,并没有真正发现什么突出的问题(尽管我承认我对这些工具不是很熟悉)。
我该怎么弄清楚这里发生了什么?我不认为我的应用程序查询有责任造成这种资源使用,并且我感觉服务器上有一些内部进程正在后台运行并将其耗尽。
OPTION (MAXDOP 16)
? - Kin ShahOPTION (MAXDOP 16)
的统计更新查询是由服务器自己运行的。 - kspearrinsys.dm_db_resource_stats
似乎表明Azure门户中的DTU图是正确的。请参见https://i.imgur.com/bK3asoe.png - kspearrin