在过去一两周内,我们看到了四个案例,我们的Azure SQL数据库DTU图最终看起来像这样:
也就是说,似乎"重启" (请注意,图表在峰值之前始终显示0个DTU,但绝对不是这种情况,因为我们在此服务器上有持续的流量)。这似乎表明DTU测量重新开始。大的峰值,随后随后的衰减和稳定的DTU值似乎向我们表明数据库正在升温" (大概可能会填充缓存和组织索引吗?)。访问此数据库的Web应用程序的流量在同一时间段内没有显示任何异常,因此我们没有任何理由认为这是“高负载”的结果。
"活动记录" Azure中的项目不显示任何信息。看看"资源健康"但是,在我们的数据库中,我们看到了以下内容:
请注意您的SQL数据库问题已解决。然而,时间戳并不完全对应于上面的尖峰时间(图表显示UTC + 1时间,并且可能是资源 - 健康时间戳是UTC,所以它差不多大约1.15小时)。
点击"查看历史记录"过去几周给我们所有这些事件:
在每种情况下,数据库都是"可用"再次在刷新粒度(2分钟)内,再次建议重新启动。有趣的是,在每种情况下重启大约相隔4天。
当然,我希望并了解数据库会不时移动并重新启动。我们的网络应用程序是Asp.Net Core 2.0并使用连接弹性,因此我们没有任何失败的请求。
尽管如此,考虑到这种情况在过去几周内相对频繁发生,我当然想知道这是否需要我们这方面采取行动。例如,我们在5周左右升级到Entity Framework Core 2.0,所以我有点担心这可能与它有关。
我的问题:
有没有办法确定数据库服务器是否已重新启动?此信息是存储在数据库本身的任何位置,还是存储在主数据库中?
有没有办法知道重启的原因,以及它是否"我们的错误"或仅仅是托管环境变化的结果? Azure团队是否在任何地方公开提供此类信息?
该数据库处于S3标准级别(100 DTU),并在东南亚托管。它的大小约为3.5GB。
答案 0 :(得分:1)
请启用“查询存储”以识别您在DTU消费图表上看到的那些峰值所涉及的查询和语句。
ALTER DATABASE [DB1] SET QUERY_STORE = ON;
然后使用如下所示的查询来识别长时间运行的查询以及与之相关的表。表格的名称可以让您了解创建这些峰值的原因。
SELECT TOP 10 rs.avg_duration, qt.query_sql_text, q.query_id,
qt.query_text_id, p.plan_id, GETUTCDATE() AS CurrentUTCTime,
rs.last_execution_time
FROM sys.query_store_query_text AS qt
JOIN sys.query_store_query AS q
ON qt.query_text_id = q.query_text_id
JOIN sys.query_store_plan AS p
ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats AS rs
ON p.plan_id = rs.plan_id
WHERE rs.last_execution_time > DATEADD(hour, -1, GETUTCDATE())
ORDER BY rs.avg_duration DESC;
关于Resource Health上记录的停机时间,似乎它们与维护任务有关,因为它们每4天发生一次,但我会将其报告给SQL Azure团队并尝试获得反馈。