我正在S2版(50个DTU)下运行Azure SQL数据库。服务器的正常使用通常挂在10%左右的DTU上。但是,此服务器通常会进入一种状态,它将在数小时内将数据库的DTU使用率发送到85-90%。然后突然恢复到正常的10%使用率。
在此过载状态下,从应用程序对服务器进行的查询似乎仍在快速运行。
我可以从S2 =>任何东西(例如,S3)=> S2扩展服务器,似乎可以清除它挂起的任何状态。但是几个小时后,它将再次重复相同的重载状态周期。我注意到的另一个奇怪的事情是,如果我在S3计划(100 DTU)24/7上运行此服务器,则没有观察到此行为。当我将数据库缩减为S2计划(50 DTU)时,似乎只会发生这种情况。在S3计划中,我总是以5-10%的DTU使用率。显然未得到充分利用。
我已经检查了Azure SQL查询报告以查找流氓查询,但是我并没有发现任何异常,它显示了我所期望的使用资源的查询。
正如我们在这里看到的那样,用法全部来自数据IO。如果我更改此处的性能报告以按MAX显示热门的数据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%)。作为常规维护的一部分,我还每周对整个数据库运行统计信息更新(和索引重建)。
这是另一个报告,该报告显示MAX数据IO查询的时间跨度仅在高资源使用事件期间涵盖数小时。
如我们所见,并不是所有查询都报告大量数据IO使用情况。
我也已经在数据库上运行sp_who2
,sp_whoisacive
并没有真正看到任何东西出现在我身上(尽管我承认我不是这些工具的专家)。
我如何知道这里发生了什么?我认为没有任何应用程序查询应归咎于这种资源的使用,我感觉到在服务器的后台运行着一些内部进程正在杀死它。