Я использую базу данных SQL Azure под редакцией S2 (50 DTU). При обычном использовании сервера обычно висит около 10% DTU. Однако этот сервер регулярно переходит в состояние, когда он будет отправлять использование DTU базы данных на 85-90% в течение нескольких часов. Затем внезапно он возвращается к нормальному использованию 10%.
В этом перегруженном состоянии запросы к серверу из приложения по-прежнему работают быстро.
Я могу масштабировать сервер из S2 => что угодно (например, S3) => S2, и он, похоже, очищает любое состояние, в котором он находится. Но через несколько часов он снова повторяет тот же цикл перегруженных состояний. Еще одна странная вещь, которую я заметил, заключается в том, что, если я запускаю этот сервер на плане S3 (100 DTU) 24/7, я не наблюдал такого поведения. Кажется, это происходит только тогда, когда я сократил базу данных до плана S2 (50 DTU). На плане S3 я всегда сижу на 5-10% использования DTU. Очевидно, недостаточно используется.
Я зарегистрировался в отчетах SQL-запросов Azure в поисках мошеннических запросов, но на самом деле я не вижу ничего необычного, и он показывает мои запросы с использованием ресурсов, как и следовало ожидать.
Как мы можем видеть здесь, все использование исходит от Data IO. Если я изменю отчет о производительности здесь, чтобы показать самые высокие запросы ввода-вывода данных по MAX, мы увидим это:
Глядя на эти длительные запросы, кажется, указывает на обновления статистики. На самом деле ничего не работает из моего приложения. Например, запрос 16302 там показывает:
SELECT StatMan([SC0], [SC1], [SC2], [SB0000]) FROM (SELECT TOP 100 PERCENT [SC0], [SC1], [SC2], step_direction([SC0]) over (order by NULL) AS [SB0000] FROM (SELECT [UserId] AS [SC0], [OrganizationId] AS [SC1], [Id] AS [SC2] FROM [dbo].[Cipher] TABLESAMPLE SYSTEM (1.250395e+000 PERCENT) WITH (READUNCOMMITTED) ) AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SC2], [SB0000] ) AS _MS_UPDSTATS_TBL OPTION (MAXDOP 16)
Но опять же, отчет также показывает, что эти запросы используют только небольшой процент использования ввода-вывода данных на сервере (<4%). Я также запускаю обновления статистики (и перестройки индекса) для всей базы данных на еженедельной основе в рамках регулярного обслуживания.
Вот еще один отчет, который показывает запросы ввода-вывода MAX для промежутка времени, охватывающего несколько часов только во время инцидента с высоким использованием ресурсов.
Как мы видим, на самом деле нет запросов, сообщающих о значительном использовании ввода-вывода данных.
Кроме того, я побежал sp_who2
и sp_whoisacive
в базе данных и на самом деле не вижу ничего выпрыгивая у меня (хотя я признаю , что я не являюсь экспертом с помощью этих инструментов).
Как мне понять, что здесь происходит? Я не думаю, что какой-либо из моих запросов приложений виноват в использовании этого ресурса, и у меня возникает ощущение, что на сервере в фоновом режиме выполняется какой-то внутренний процесс, который его убивает.