Подтвердить что ты не робот

Что такое SNIReadSyncOverAsync и почему это займет много времени?

На нашем веб-сайте ASP.Net у нас был тайм-аут запросов. AppDynamics показывает, что вызовы процедур SQL возвращаются в считанные секунды, но мы тратим 100 + секунд на SNIReadSyncOverAsync.

Кто-нибудь знает, что делает этот метод/и почему он забирает столько времени? Мы не используем EF, на который ссылаемся в каждом вопросе/сообщении, которое я смог найти.

Заранее спасибо

Обновление

Это было какое-то время, и пока мы не пришли к решению о том, почему все время проводилось в SNIReadSyncOverAsync, у меня есть несколько мыслей.

Я думаю, что в этом случае возможно, что определенная версия AppDynamics сообщала время, затраченное на вызовы SQL, но у меня нет реальных данных, чтобы поддержать это, просто мое предположение из того, что я наблюдал. В конечном итоге мы перестали видеть, что время, проведенное в SNIReadSyncOverAsync, перешло к самим запросам времени.

Это все еще не так много, потому что одни и те же запросы будут запускаться мгновенно в SSMS в одной базе данных.

Окончательный ответ оказался связанным с ARITHABORT, заставляя наше приложение и SSMS использовать два разных плана выполнения (см. https://dba.stackexchange.com/a/9841), объясняя, почему мы не смогли воспроизводите таймауты с помощью SSMS.

Как только мы решили это, мы смогли идентифицировать несколько частей процедуры, которые нуждались в настройке, и мы не сталкивались с необъяснимыми таймаутами или SNIReadSyncOverAsync с тех пор.

4b9b3361

Ответ 1

Не уверен, что вы уже это разрешили, но: SNI - это сетевой интерфейс SQL Server, и указанный метод существует в большинстве стеков полного вызова ADO.NET, которые ждут данных с SQL Server. Это независимо от того, является ли реализация более высокого уровня EF, raw ADO.NET или что-то еще.

Я не уверен, какой показатель или сигнал AppDynamics использует для захвата завершения выполнения хранимой процедуры, но вы можете видеть такое поведение, если ваша хранимая процедура выполняется относительно быстро, но передавая результат запроса с сервера на ваш клиент занимает некоторое время.

Не зная больше о вашей инфраструктуре, очень сложно помочь дальше. Если проблема по-прежнему сохраняется, я бы рекомендовал запустить тот же запрос в студии SQL Server Management с настройкой SET STATISTICS TIME ON и "Включить статистику клиентов". Возможно, эти цифры дадут вам представление о том, действительно ли передача данных является проблемой.

Ответ 2

В моем случае действительно, как упоминает Джуни, очень медленная передача результатов запроса. Я использую Automapper для подготовки данных для отправки клиенту. Таким образом, неясно, какое именно свойство вызвало нагрузку, но я уверен, что я разрезал все сложные, которые мне не нужно показывать на стороне клиента. (Мне сначала понадобилась коллекция, которая будет отображаться в сетке на стороне клиента.) Выполнение стало очень быстрым.