我在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还没有呢?
答案 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并尝试微调它们的查询