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 限制達到最大值,甚至接近該值的跡象。那麼你認為這裡發生了什麼?我確信我正在做某事,但我的微軟支持人員一直在說,優化、擴大、分析您的查詢等。
我想我只是在尋找具有類似經驗的人,他們確實找到了微軟的根本原因,或者甚至可以告訴我我的基準不好的人。
我收到了來自微軟支持的答案,這是有道理的。無論如何,對於未來的搜尋:
無論是什麼平台,版本(不是 Web/Biz)都提供了確保 https://azure.microsoft.com/en-us/documentation/articles/sql-database-benchmark-指定的 DTU 和響應約束的能力概述/#metrics (查看度量部分)基本和標準的響應時間限制在 90 個百分位條上表示為秒,因此隱含地不保證毫秒順序平均值。
總結一下:我們無法通過測量完成特定語句的平均毫秒數來比較 V1 和 V12 的性能。