SQL Azure 在 V12 上插入查询比 V11 慢十倍?

SQL Azure 在 V12 上插入查询比 V11 慢十倍?

大约两周前,我注意到我们的一个使用 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 的性能。

相关内容