Azure SQL 100%DTU使用率

时间:2016-10-18 07:07:33

标签: azure azure-sql-database

我在Azure SQL服务器的可靠性方面遇到了一些问题。

有时使用以下子查询进行复杂查询:

SELECT DISTINCT [DeviceName] ,name ,data.[Addr] ,[Signal] FROM (SELECT [DeviceName] ,[Signal] ,MAX([Signal]) OVER (PARTITION BY [Addr]) AS 'MaxSignal',[Timestamp] ,[Addr] ,[PartitionId] ,[EventEnqueuedUtcTime] FROM [dbo].[mytable] WHERE CAST([Timestamp] AS DATETIME) > DATEADD(HOUR,+2,(DATEADD(MINUTE, -10, GETDATE()))) ) data LEFT JOIN mytable ON [dbo].[myreftable].[Addr] = data.[Addr] WHERE [Signal] = [MaxSignal];

几乎是瞬间完成,就像我想的那样,有时只是做SELECT COUNT(*) FROM mytable 耗时超过30分钟,并显示如下DTU用法图:

DTU usage graph

任何人都知道任何解决方案吗?我做错了什么吗?或者Azure还没有呢?

1 个答案:

答案 0 :(得分:1)

你付出的就是你得到的东西。你需要看一下你系统中哪些顶级资源消费者.DTU什么都不是,但是对你的数据库可用的CPU,IO,内存有限制。

所以要解决DTU问题,我会按照以下步骤进行操作..

1.)以下查询为我提供了所有资源的最近14天的资源使用情况..

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

运行上面的查询可以让您了解您的CPU百分比一致

2。)以下查询让我了解资源使用情况。

SELECT start_time, end_time,   
  (SELECT Max(v)    FROM (VALUES (avg_cpu_percent), (avg_physical_data_read_percent), (avg_log_write_percent)) AS value(v)) as [avg_DTU_percent] 
FROM sys.resource_stats where database_name = ‘<your db name>’ order by end_time desc

现在,我有足够的数据来查找哪个指标更耗费资源,我可以按照正常的方法尝试进行故障排除..

比如说,如果我的CPU使用率一直超过90%,我会收集所有消耗更多CPU并尝试微调它们的查询