Чому трапляються типи очікування async_network_io?


10

Минулого тижня у нашій базі даних трапилось щось дивне. Раптом додаток було заблоковано для наших користувачів, які не змогли зберегти нові об’єкти тощо. Після перегляду «Монітора активності» SQL Server (2008 з режимом сумісності 2005) я побачив наступні три записи:

типи очікування async_network_io

Через деякий час користувачі отримали тайм-аут з'єднання. Коли я вбив процес 64, вони знову могли нормально врятувати.

Проблема полягає в тому, що об'єкти, які вони намагалися зберегти під час блоку, вставлялися в БД не раз (до 3 разів), хоча є код, який повинен запобігти цьому (колонка з цифрами, яка повинна бути унікальною, але без обмежень ... перевірка відбувається в коді).

Ми використовуємо Entity Framework 6.0.

  • Хтось із вас знає, чому і коли виникають ці типи очікування ASYNC_NETWORK_IO і як їх уникнути?
  • А що саме вони означають?

1
Погляньте на цю статтю з Doug Lane: brentozar.com/archive/2015/07/… Це може вирішити те, що ви бачите з EF.
Kris Gruttemeyer

Дуже цікава стаття! Дякую, я перегляну це :)
xeraphim

1
Перевірте сховище статистики очікування - ASYNC_NETWORK_IO . Скористайтеся сценарієм, який надає Павло, щоб побачити, чи є інші проблеми.
Кін Шах

Відповіді:


12

ASYNC_NETWORK_IOякимось чином вказує на те, що клієнтська програма не обробляє результати так швидко, як SQL Server подає їх. Це може бути викликано проблемою з клієнтською програмою або з мережевим з'єднанням між сервером і клієнтською програмою.

Будь ласка, зверніться до повідомлення Томаса Ларока

Очікування ASYNC_NETWORK_IO вказує на те, що відбувається один з двох сценаріїв. Перший сценарій полягає в тому, що сеанс (тобто SPID) чекає, коли клієнтська програма обробить набір результатів і відправить сигнал назад на SQL Server, що він готовий обробити більше даних. Друга полягає в тому, що може виникнути проблема з продуктивністю мережі.

або це повідомлення Джо Сака

Як ви, можливо, вже знаєте, типи очікування ASYNC_NETWORK_IO (спостерігається в SQL 2005) та NETWORKIO (спостерігається в SQL 2000) пов’язані або з викликаючим додатком, який не обробляє результати досить швидко з SQL Server, або пов'язаний з проблемою продуктивності мережі. .

Оскільки ви використовуєте entity framework цей пост від Brent Ozar, може бути корисним також

Переглядаючи статистику очікування цих запитів, я побачив, що було багато ASYNC_NETWORK_IO - часто 1000+ мілісекунд. Це теж не мало сенсу! Як запит може мати так мало часу в процесорі і так мало читань? Це не так, як програма запитувала мільйони рядків і не могла споживати результати досить швидко.


6

Існують деякі помилки щодо типу очікування ASYNC_NETWORK_IO, в першу чергу через назву, яка вказує на мережеву проблему, але це досить рідкісна причина цього типу очікування.

Надмірне очікування ASYNC_NETWORK_IO може виникнути за двох сценаріїв:

  1. Сеанс повинен чекати, коли клієнтська програма обробить дані, отримані від SQL Server, щоб надіслати сигнал на SQL Server, що він може приймати нові дані для обробки. Це загальний сценарій, який може відображати поганий дизайн програми і є найчастіше причиною надмірних значень типу очікування ASYNC_NETWORK_IO.

    Це включає дослідження програми, яка викликає надмірні значення типу очікування ASYNC_NETWORK_IO і часто координується з розробниками додатків, які його створили.

  2. Пропускна здатність мережі виводиться з максимуму. Засмічена Ethernet призведе до повільної передачі даних назад та назад від програми. Це саме по собі призведе до погіршення ефективності програми.

Набагато більше деталей можна знайти на цій сторінці

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.