Dlaczego występują typy oczekiwania async_network_io?


10

W ubiegłym tygodniu w naszej bazie danych wydarzyło się coś dziwnego. Nagle aplikacja została zablokowana dla naszych użytkowników, którzy nie byli w stanie zapisać nowych encji itp. Po spojrzeniu na Monitor aktywności SQL Server (2008 z trybem zgodności 2005) zobaczyłem trzy następujące wpisy:

typy oczekiwania async_network_io

Po pewnym czasie użytkownicy otrzymali limit czasu połączenia. Kiedy zabiłem proces 64, mogliby normalnie zaoszczędzić.

Problem polega na tym, że podmioty, które próbowały zapisać podczas bloku, zostały wstawione do bazy danych więcej niż raz (do 3 razy), mimo że istnieje kod, który powinien temu zapobiec (kolumna liczbowa, która musi być unikalna, ale bez ograniczeń ... kontrola odbywa się w kodzie).

Używamy Entity Framework 6.0.

  • Czy ktoś z was wie, dlaczego i kiedy występują typy oczekiwania ASYNC_NETWORK_IO i jak ich uniknąć?
  • A co dokładnie oznaczają?

1
Rzuć okiem na ten artykuł od Doug Lane: brentozar.com/archive/2015/07/… To może dotyczyć tego, co widzisz dzięki EF.
Kris Gruttemeyer,

Bardzo ciekawy artykuł! Dziękuję,
popatrzę

1
Sprawdź repozytorium statystyk oczekiwania - ASYNC_NETWORK_IO . Skorzystaj ze skryptu dostarczonego przez Pawła, aby sprawdzić, czy występują inne problemy.
Kin Shah,

Odpowiedzi:


12

ASYNC_NETWORK_IOw jakiś sposób wskazuje, że aplikacja kliencka nie przetwarza wyników tak szybko, jak SQL Server je podaje. Może to być spowodowane problemem z aplikacją kliencką lub połączeniem sieciowym między serwerem a aplikacją kliencką.

Proszę odnieść się do postu Thomasa LaRocka

Oczekiwanie na ASYNC_NETWORK_IO wskazuje, że ma miejsce jeden z dwóch scenariuszy. Pierwszy scenariusz polega na tym, że sesja (tj. SPID) czeka na aplikację klienta do przetworzenia zestawu wyników i wysłania z powrotem sygnału do programu SQL Server, że jest gotowy do przetworzenia większej ilości danych. Po drugie, może występować problem z wydajnością sieci.

lub ten post Joe Sack

Jak być może już wiesz, typy oczekiwania ASYNC_NETWORK_IO (widoczne w SQL 2005) i NETWORKIO (widoczne w SQL 2000) są powiązane z aplikacją wywołującą, która nie przetwarza wyników wystarczająco szybko z SQL Server lub jest związana z problemem z wydajnością sieci .

Ponieważ używasz entity framework tego postu przez Brenta Ozara, może być również przydatny

Patrząc na statystyki oczekiwania dla tych zapytań, zauważyłem, że było dużo ASYNC_NETWORK_IO - często ponad 1000 milisekund. To też nie miało sensu! Jak zapytanie może zająć tak mało czasu procesora i tak mało odczytów? To nie tak, że aplikacja prosiła o miliony wierszy i nie mogła wystarczająco szybko zużyć wyników.


6

Istnieją pewne nieporozumienia dotyczące typu oczekiwania ASYNC_NETWORK_IO, przede wszystkim z powodu nazwy wskazującej na problem z siecią, ale jest to dość rzadka przyczyna tego typu oczekiwania.

Nadmierne oczekiwania ASYNC_NETWORK_IO mogą wystąpić w dwóch scenariuszach:

  1. Sesja musi poczekać, aż aplikacja kliencka przetworzy dane otrzymane z SQL Server, aby wysłać sygnał do SQL Server, że może zaakceptować nowe dane do przetwarzania. Jest to częsty scenariusz, który może odzwierciedlać zły projekt aplikacji i jest najczęściej przyczyną nadmiernych wartości typu oczekiwania ASYNC_NETWORK_IO.

    Obejmuje to zbadanie aplikacji powodującej nadmierne wartości typu oczekiwania ASYNC_NETWORK_IO i często koordynację z twórcami aplikacji, którzy ją utworzyli.

  2. Przepustowość sieci jest maksymalna. Zapchany Ethernet spowoduje powolną transmisję danych tam iz powrotem z aplikacji. To samo w sobie obniży wydajność aplikacji.

Na tej stronie można znaleźć znacznie więcej szczegółów

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.