我想在Azure数据库不在高负载下执行命令,即DTU百分比低于10%。该查询为我提供了DTU百分比。
SELECT TOP (1) end_time, (SELECT Max(v)
FROM (VALUES (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) AS
value(v)) AS [avg_DTU_percent]
FROM sys.dm_db_resource_stats;
文档说它每15秒更新一次。这是否意味着信息最多不超过15秒?如果我在执行密集操作之前立即运行此查询,我是否会知道我不会最大化DTU(接受操作本身并不会这样做)?
在执行另一个命令之前,还有其他方法可以检查数据库承受的负载吗?
答案 0 :(得分:0)
如下面的查询所示,如果您分别验证每个资源消耗,则将很有帮助。您可以根据需要将80设置为查询的阈值。
SELECT
(COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'CPU Fit Percent'
,(COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Log Write Fit Percent'
,(COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Physical Data Read Fit Percent'
FROM sys.dm_db_resource_stats
例如,如果您看到avg_log_write_percent在您的Azure SQL数据库上接近或等于100%,则限制正在影响您的数据库,而CPU或其他单独措施的说明无关紧要。在这种情况下,您的SQL数据库负载很高,并且您不想添加更多负载。
在下面的查询中,我添加了数据库当前层的DTU限制,因此您可以比较平均DTU限制与最近5分钟内的平均DTU消耗,并确定是否要添加额外的工作负载(更多执行说明)到数据库的当前负载。
DECLARE @s datetime;
DECLARE @e datetime;
SET @s= DateAdd(minute,-5,GetUTCDate());
SET @e= GETUTCDATE();
SELECT
end_time AS [EndTime]
, (SELECT Max(v) FROM (VALUES (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) AS value(v)) AS [AvgDTU_Percent]
, ((dtu_limit)*((SELECT Max(v) FROM (VALUES (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) AS value(v))/100.00)) AS [AvgDTUsUsed]
, dtu_limit AS [DTULimit]
FROM sys.dm_db_resource_stats
WHERE end_time BETWEEN @s AND @e