Чи чекає ASYNC_NETWORK_IO тип турботи?


16

Дивлячись на список збережених процедур, які потребують тривалого часу на виконання, одна з них виділяється як найчастіше очікування. Однак більша частина цього очікування (81%) - це ASYNC_NETWORK_IO, і я знаю, чому: збережена процедура передає приблизно 400 МБ інформації.

У документації зазначено, що причиною ASYNC_NETWORK_IO є те, що клієнт не може йти в ногу з потоком даних, і це, мабуть, правда. Я не впевнений, як змусити клієнта бути в курсі, оскільки все, що він робить, - викликати збережену процедуру через ADO.NET, а потім просто обробляти набір даних.

Отже, враховуючи цю інформацію, я повинен хвилюватися щодо типу очікування ASYNC_NETWORK_IO для цієї процедури? Чи насправді це впливає на продуктивність сервера?

Додаткова інформація:

  • Я на сервісному пакеті 2 SQL Server 2005.
  • Клієнтська програма знаходиться в тому ж полі, що і SQL Server (я знаю, я знаю ... але я нічого не можу з цим зробити).

1
Найкращий спосіб подумати про такий тип очікування - це те, що в запиті немає нічого, що викликає його - повернення даних клієнту. Ви також побачите це багато з вас пов'язаних таблиць в Access. Одна із можливостей, залежно від вашого клієнтського додатку, - це розбити дані на менші шматки або просто повернути менше даних. Якщо це не варіант, ви, ймовірно, будете обмежені в тому, що можете зробити, щоб зменшити його.
JNK

Чи підключається клієнтська програма за допомогою спільної пам'яті або TCP / IP? Чи клієнтське додаток і SQL Server мають однаковий набір ядер процесора, або ви використовуєте техніку маскування афінності для їх розділення?
Джон Сейгель

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

Ваша пам’ятка SAN або локальна?
Ерік Хіггінс

@EricHiggins Просто локальний набір жорстких дисків RAIDed.
AngryHacker

Відповіді:


14

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

Причини можуть бути двома:

  1. Додаток написано неефективно і не обробляє рядки досить швидко.
  2. Мережа максимізована.

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

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


Для точки кулі 1. Отримання даних здійснюється через ADO.NET, використовуючи стандартний код: var dataSet = new DataSet(); var da = new SqlDataAdapter(command); da.Fill(dataSet); Тому я не впевнений, що саме може бути повільним.
AngryHacker

Для пункту 2. Програма знаходиться в тому самому полі, що і SQL, і з'єднання здійснюється методом Спільної пам'яті. Тож теоретично це повинно бути надшвидким.
AngryHacker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.