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

问题描述 投票:0回答:1

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

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

azure tsql azure-sql-database
1个回答
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

例如,如果您在Azure SQL数据库上看到avg_log_write_percent接近或等于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 
© www.soinside.com 2019 - 2024. All rights reserved.