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:
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ą?
sql-server
sql-server-2008
entity-framework
kserafim
źródło
źródło
Odpowiedzi:
ASYNC_NETWORK_IO
w 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
lub ten post Joe Sack
Ponieważ używasz
entity framework
tego postu przez Brenta Ozara, może być również przydatnyźródło
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:
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.
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
źródło