Widziałeś już ten typ oczekiwania, prawda? Cóż, z pewnością jest to typ oczekiwania, który spowodował wiele zamieszania. Bezpośrednio skupia się na słowie „SIEĆ”, ale najczęściej nie ma ono nic wspólnego z siecią!
Typ oczekiwania ASYNC_NETWORK_IO zazwyczaj daje dwa typy symptomów, pierwszy to obciążenie sesji, które czeka na odpowiednią aplikację kliencką, aby potwierdzić/przetworzyć dany zestaw danych i powiadomić SQL Server, że jest gotowy do przetwarzania/potwierdzania większej ilości danych. Drugim objawem może być problem z wydajnością w sieci między aplikacją a instancją bazy danych. Za kulisami SQL Server przechowuje dane w buforze wyjściowym do momentu otrzymania od klienta potwierdzenia, czy zużycie danych jest kompletny. ASYNC_NETWORK_IO jest sygnałem ostrzegawczym, że aplikacja nie jest wydajna w odczytywaniu wymaganych danych z bazy danych zaplecza. Podstawowa sieć może również mieć problemy, które mogą powodować dłuższe oczekiwanie na przetwarzanie danych, a sygnały są wysyłane z powrotem od klienta do serwera.
Możliwe przyczyny tego oczekiwania to:
- Kod aplikacji nie pobiera danych poprawnie
- Klient żąda dużych zbiorów danych
- Nadmierne filtrowanie danych występujących po stronie klienta lub aplikacji
- Źle skonfigurowane urządzenia sieciowe, takie jak karty, przełączniki itp.
Na wysokim poziomie administrator baz danych może chcieć sprawdzić następujące rzeczy:
- Sprawdź kod aplikacji i upewnij się, że aplikacja poprawnie/wydajnie odczytuje dane. Na przykład, czy Twoja aplikacja wycofuje dużą liczbę wierszy tylko po to, aby przetwarzać tylko jeden wiersz na raz?
- Zbędne filtrowanie danych po stronie klienta/aplikacji? Ogranicz rzędy.
Jeśli powyższe elementy zostaną sprawdzone, ale problemy z ASYNC_NETWORK_IO nadal występują, może to być spowodowane siecią. Oto kilka rzeczy, którym możesz się przyjrzeć:
- Sprawdź połączenie sieciowe między aplikacją a instancją bazy danych zaplecza i zweryfikuj przepustowość.
- Użyj sys.dm_io_virtual_file_stats, aby przetestować sieć pod kątem ogólnego opóźnienia spowodowanego obciążeniem lub odległością
- Zbadaj konfigurację karty sieciowej na serwerze bazy danych, aby upewnić się, że nie ma żadnych błędów i/lub ustawień.
ASYNC_NETWORK_IO WAIT TYPE może rzeczywiście być problemem związanym z siecią, ale często może to być spowodowane przez aplikację kliencką, która nie przetwarza wydajnie swoich danych. Jeśli rzeczywiście tak jest, jest to okazja dla DBAS i programistów do współpracy, aby zrozumieć, czego aplikacja naprawdę potrzebuje w najlepszym interesie wydajności bazy danych zaplecza. Zapewnienie, że większość filtrowania danych odbywa się w SQL Server, jest najlepszą praktyką, którą można osiągnąć za pomocą widoków lub bardziej szczegółowych warunków w składni transakcji.
Chociaż istnieje wiele sposobów monitorowania i mierzenia oczekiwania ASYNC_NETWORK_IO przy użyciu skatalogowanych DMV i zdarzeń rozszerzonych w SQL Server, zachęcamy naszą społeczność administratorów baz danych SQL Server do przyjrzenia się chmurze Quest Spotlight, która zapewnia wydajność w określaniu głównej przyczyny typu oczekiwania zużycie w okresie historycznym.