На прошлой неделе в нашей базе произошло что-то странное. Внезапно приложение заблокировалось для наших пользователей, которые не смогли сохранить новые объекты и т. Д. После просмотра монитора активности SQL Server (2008 с режимом совместимости 2005) я увидел следующие три записи:
Через некоторое время пользователи получили тайм-аут соединения. Когда я убил процесс 64, они могли нормально сохранить снова.
Проблема в том, что сущности, которые они пытались сохранить во время блока, были вставлены в БД более одного раза (до 3 раз), даже несмотря на наличие кода, который должен предотвращать это (числовой столбец, который должен быть уникальным, но без ограничений). ... проверка происходит в коде).
Мы используем Entity Framework 6.0.
- Кто-нибудь из вас знает, почему и когда возникают эти типы ожидания ASYNC_NETWORK_IO и как их избежать?
- И что именно они имеют в виду?
Ответы:
ASYNC_NETWORK_IO
что-то указывает на то, что клиентское приложение не обрабатывает результаты так быстро, как SQL Server их передает. Это может быть вызвано проблемой с клиентским приложением или сетевым соединением между сервером и клиентским приложением.Пожалуйста, обратитесь к сообщению Томас Ларок
или этот пост от Джо Сэка
Так как вы используете
entity framework
этот пост от Brent Ozar, это может быть полезноисточник
Существуют некоторые заблуждения относительно типа ожидания ASYNC_NETWORK_IO, в основном из-за имени, которое указывает на проблему в сети, но это довольно редкая причина для этого типа ожидания.
Чрезмерное ожидание ASYNC_NETWORK_IO может произойти при двух сценариях:
Сеанс должен дождаться, пока клиентское приложение обработает данные, полученные от SQL Server, чтобы отправить SQL Server сигнал о том, что он может принять новые данные для обработки. Это распространенный сценарий, который может отражать плохой дизайн приложения, и является наиболее частой причиной чрезмерных значений типа ожидания ASYNC_NETWORK_IO.
Это включает в себя исследование приложения, которое вызывает чрезмерные значения типа ожидания ASYNC_NETWORK_IO, и часто координацию с разработчиками приложения, которые его создали.
Пропускная способность сети максимально. Засоренный Ethernet вызовет медленную передачу данных назад и вперед из приложения. Это само по себе ухудшит эффективность приложения.
Более подробную информацию можно найти на этой странице
источник