大约两周前,我注意到我们的一个使用 SQL Azure 后端的应用程序出现了性能下降。90% 的时间,该应用程序在 S1 层上的 V12 上运行,有时会扩展到 S2、S3 或 P1。
基本上,我经历了查询执行时间明显变慢的情况,尤其是在 INSERT 查询上。因此,我进行了测试和基准测试,测试和基准测试,然后又进行了测试和基准测试。每一步我都试图排除不确定因素。结果发现,自从我们转向 V12 S1 以来,性能比以前慢了很多。
我最终想出了一个很容易重现的方法:在 Azure 门户中创建两个新的示例数据库 (Adventureworks_LT)。一个在新的 v12 服务器上,另一个在新的 V11 服务器上。两个都是 S1 层。
然后对两者运行我的基准测试(有点):
DECLARE @start_time DATETIME, @end_time DATETIME
SET @start_time = CURRENT_TIMESTAMP
DECLARE @cnt INT = 0;
DECLARE @until INT = 100;
DECLARE @timeNow DATETIME;
WHILE @cnt < @until
BEGIN
Set @timeNow = CURRENT_TIMESTAMP;
INSERT INTO dbo.ErrorLog
(
ErrorTime,
UserName,
ErrorNumber,
ErrorMessage
)
VALUES
(
@timeNow,
'BENCHMARK',
DATEDIFF(MILLISECOND,@timeNow,CURRENT_TIMESTAMP),
'BENCHMARK'
)
SET @cnt = @cnt + 1;
WAITFOR DELAY '00:00:00:500'; /* wait 500 miliseconds*/
END
SET @end_time = DateAdd(MILLISECOND,(@until)*-500.,CURRENT_TIMESTAMP)
/*subtract 500ms per iteration to make up for the built-in delay*/
SELECT DATEDIFF(ms, @start_time, @end_time) as 'total query execution time', DATEDIFF(ms, @start_time, @end_time)/@until as 'average query execution time'
SELECT * FROM sys.dm_db_resource_stats;
我的结果:
平均执行时间 V11:17ms
平均执行时间 V12:131ms
有些运行的差异比其他运行大,但 V11 每次的表现都远远优于 V12。
sys.dm_db_resource_stats 现在显示出超出 DTU 限制的迹象,甚至接近该限制。那么您认为这是怎么回事呢?我确信自己发现了一些问题,但我的微软支持人员一直说,优化、扩大规模、分析您的查询等。
我想我只是在寻找具有类似经历的人,能够找到微软的根本原因,或者甚至可以告诉我我的基准测试不好的人。
答案1
我收到了微软支持的答复,这有点道理。无论如何,对于未来的搜索:
无论什么平台,版本(非 Web/Biz)都能够确保 DTU 和响应约束符合 https://azure.microsoft.com/en-us/documentation/articles/sql-database-benchmark-overview/#metrics (查看“指标”部分)基本和标准的响应时间约束以 90 百分位数的秒数表示,因此隐含地不保证毫秒级平均值。
总结一下:我们无法通过测量完成特定语句的平均毫秒数来比较 V1 和 V12 的性能。