SQL Azure 中标准和高级性能层中的 DTU 如何比较?

sha*_*oth 9 performance azure-sql-database

我们最近观察到在 Standard3 性能层中运行的 SQL Azure 数据库出现严重的性能下降 - CPU 利用率在短短一小时内从 10% 到 50% 上升到接近 100%。因此,我们将性能层更改为 Premium2,CPU 利用率立即下降到 8% 左右。

Standard3 声称提供 100 个 DTU,Premium2 声称提供 250 个 DTU。这意味着 8% 的 P2 只是 20 个 DTU,这与使用 Standard3 中的所有 100 个 DTU 相去甚远。

这些 DTU 是否不同?否则,从 100 DTU 性能层切换到 250 DTU 性能层时,这种利用率突然下降怎么可能?

Uni*_*onP 7

在查看这两层的定价时,我同样感到困惑。100 个标准 DTU 的成本为 150 美元/月,而高级版的 125 个 DTU 的成本为 465 美元/月,我认为必须有其他原因可以解释这种差异。我认为来自https://docs.microsoft.com/en-us/azure/sql-database/sql-database-service-tiers-dtu#choosing-a-service-tier-in-the-dtu-based 的这一行-purchasing-model必须说明区别:

                            | Standard                   | Premium
IO throughput (approximate) | 2.5 IOPS per DTU           | 48 IOPS per DTU
IO latency (approximate)    | 5 ms (read), 10 ms (write) | 2 ms (read/write)
Run Code Online (Sandbox Code Playgroud)

所以看起来高级 DTU 实际上比标准 DTU 值高 19 倍


The*_*war 5

Azure 数据库的性能以 DTUS 表示,这意味着每秒可以完成的事务数。此外,它还限制了数据库将获得的最大内存、cpu、IO 量..请参阅下表了解更多详细信息和注意会话请求部分..

在此处输入图片说明

我希望上图阐明了不同数据库层之间的差异。下面是 Azure 文档必须说明的何时使用不同的数据库层。

在此处输入图片说明

每当您想估计 Azure 数据库的性能时,您都需要查看下面的 DMVS,它提供了有关 DTU 使用情况的更多详细信息,以 IO、日志、内存、CPU 表示。

--此 DMV 仅包含一小时的数据,但每 15 秒捕获一次

SELECT  
    AVG(avg_cpu_percent) AS 'Average CPU Utilization In Percent', 
    MAX(avg_cpu_percent) AS 'Maximum CPU Utilization In Percent', 
    AVG(avg_data_io_percent) AS 'Average Data IO In Percent', 
    MAX(avg_data_io_percent) AS 'Maximum Data IO In Percent', 
    AVG(avg_log_write_percent) AS 'Average Log Write Utilization In Percent', 
    MAX(avg_log_write_percent) AS 'Maximum Log Write Utilization In Percent', 
    AVG(avg_memory_usage_percent) AS 'Average Memory Usage In Percent', 
    MAX(avg_memory_usage_percent) AS 'Maximum Memory Usage In Percent' 
FROM sys.dm_db_resource_stats; 
Run Code Online (Sandbox Code Playgroud)

--此 DMV 包含 14 天的数据,捕获间隔为 5 分钟

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; 
Run Code Online (Sandbox Code Playgroud)

每当您看到 DTU 指标始终为 90% 时,它就是瓶颈的指标,并且可以通过相同的方式对其进行故障排除,我们对我们的本地服务器进行故障排除。

举例来说,您在一段时间内从通过 DMV 捕获的数据中看到 CPU 始终保持在 90%,您可以从收集导致高 CPU 的查询开始,看看是否可以调整它们以消耗更少的 CPU..当所有你的调优工作用完了,那么你肯定需要升级到更高级别的Tier

参考资料: https : //azure.microsoft.com/en-in/documentation/articles/sql-database-performance-guidance/#monitoring-resource-use-with-sysresourcestats


sha*_*oth 4

这次的原因是 SQL Azure 改变了对经常运行的查询使用哪个索引的想法。SQL Azure 有时认为更改所使用的索引可能是一个好主意(基于收集的指标)。在发现问题时,该机制缺乏验证 - 一旦查询切换到另一个索引,数据库引擎将不会验证是否有实际改进。不知道从那时起这是否发生了变化。解决这种情况的方法是使用WITH INDEX提示。

我们观察到的性能改进并不是因为性能层本身的更改,只是当标准更改为高级时,可能发生了硬件更改,因此数据库统计信息被清除,数据库引擎再次重新考虑查询计划,因此当我们切换到高级时引擎刚刚重置为旧计划,这就是我们当时获得性能提升的原因。