Около двух недель назад я заметил снижение производительности, которое сказалось на одном из наших приложений с серверной частью SQL Azure. Он работает на V12 на уровне S1 90% времени, иногда с масштабированием до S2, S3 или P1.
В основном у меня было значительно более медленное время выполнения запросов, особенно в запросах INSERT. Итак, я тестировал и тестировал, тестировал и тестировал, а затем тестировал и тестировал еще несколько. На каждом шагу я пытался исключить неопределенные факторы из уравнения. Оказалось, что с тех пор, как мы перешли на V12, производительность S1 была намного ниже, чем раньше.
То, что я в конце концов придумал, было легко воспроизвести: создать две новые образцы баз данных (Adventureworks_LT) на портале Azure. Один на новом сервере 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: 17 мс
Среднее время выполнения V12: 131 мс
В некоторых версиях разница больше, чем в других, но V11 каждый раз значительно превосходит V12.
sys.dm_db_resource_stats теперь показывает признаки превышения пределов DTU или даже близкого к нему. Так что, как вы думаете, здесь происходит? Я убежден, что я кое-что нахожу, но мои ребята из службы поддержки Microsoft постоянно говорят: оптимизируйте, масштабируйте, профилируйте ваши запросы и т. Д.
Полагаю, я просто ищу кого-то с похожим опытом, который смог найти первопричину в Microsoft, или даже кого-то, кто может сказать мне, что мой тест не подходит.
Я получил ответ от службы поддержки Microsoft, который имеет смысл. В любом случае для будущих поисков:
Независимо от платформы, выпуски (не Web / Biz) предоставляют возможность гарантировать DTU и ограничения ответа, как указано https://azure.microsoft.com/en-us/documentation/articles/sql-database-benchmark-overview/#metrics (см. раздел «Метрики»). Ограничения по времени отклика для базового и стандартного уровней выражаются в секундах на шкале 90 процентилей и, таким образом, неявно не гарантируют среднего порядка миллисекунд.
Подводя итог: мы не можем сравнивать производительность V1 и V12, измеряя среднее количество миллисекунд на выполнение определенного оператора.