在执行命令之前,如何测试Azure SQL数据库承受的负载?

时间:2019-03-15 17:25:51

标签: azure tsql azure-sql-database

我想在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(接受操作本身并不会这样做)?

在执行另一个命令之前,还有其他方法可以检查数据库承受的负载吗?

1 个答案:

答案 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