【问题标题】:Azure SQL 100% DTU usageAzure SQL 100% DTU 使用率
【发布时间】:2016-10-18 16:10:33
【问题描述】:

我在 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 使用情况图表:

有人知道这个问题的任何解决方案吗?是我做错了什么吗?还是 Azure 根本不存在?

【问题讨论】:

    标签: azure azure-sql-database


    【解决方案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 的查询并尝试对其进行微调

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      相关资源
      最近更新 更多