2009-08-25 8 views
9

Co spowodowałoby zawieszenie zapytania w Management Studio?Zawieszony status w monitorze aktywności SQL

  1. Wykonuję prosty wybór 60000 najlepszych z tabeli (która ma 11 milionów wierszy), a wyniki wracają w ciągu sekundy lub dwóch.
  2. Zmieniam zapytanie na górę 70000, a wyniki potrwają do 40 minut.

Z robienia czegoś na innym, ale pokrewnym problemie natrafiłem na kogoś używającego DBCC FREEPROCCACHE, żeby to naprawić.

  1. Uruchamiam DBCC FREEPROCCACHE, a następnie ponawiam zapytanie dla 70000 i wygląda na to, że działa.

Jednak nadal występuje problem z innym zapytaniem.

  1. Zwiększam, aby powiedzieć 90000 lub gdy spróbuję otworzyć tabelę przy użyciu [Prawy-> Otwórz tabelę], ciągnie się około 8000 rekordów i zatrzymuje się.

Sprawdzanie dziennika aktywności w przypadku otwierania tabeli pokazuje, że sesja została zawieszona z typem oczekiwania "Async_Network_IO". Dla sesji działającej z wyborem 90000 status to "Spanie", to jest ten sam status dla powyższego wyboru zapytania 70000, które powróciło, ale za 45 min. Dziwne jest dla mnie, że status pokazuje "Spanie" i wydaje się, że nie zmienia się na "Runow" (mam aktywny monitor odświeżający o 30 sekund).

Dodatkowe uwagi:

  • Ja nie działa zarówno Otwórz tabelę i wybierz 90000 w tym samym czasie. Wszystkie zapytania są wykonywane pojedynczo.
  • Używam 32-bitowego SQL Server 2005 SP2 CU9. Próbowałem przejść na dodatek SP3, ale wystąpił błąd instalacji. Problemy pojawiły się przed próbą aktualizacji.
  • Konfiguracja serwera to klaster aktywny/aktywny, w którym problem występuje w każdym węźle, a drugie wystąpienie nie występuje w tym przypadku.
  • Mam ~ 20 innych baz danych na tej samej instancji serwera, ale tylko ten jeden DB widzi problem.
  • Ta baza danych staje się dość duża. Obecnie wynosi 76756,19 MB. Plik danych ma 11,513 MB.
  • Jestem zalogowany lokalnie w polu Serwer przy użyciu Pulpitu zdalnego.

Odpowiedz

9

Typ oczekiwania "Async_Network_IO" oznacza, że ​​oczekiwanie na pobranie przez klienta zestawu wyników jako bufora sieciowego SQL Server jest pełne. Dlaczego twój klient nie zbiera danych w odpowiednim czasie, nie mogę powiedzieć.

Innym przypadku może się zdarzyć w przypadku serwerów połączonych, gdy SQL Server wysyła zapytanie do tabeli zdalnej, w tym przypadku serwer SQL oczekuje na odpowiedź serwera zdalnego.

Warto zwrócić uwagę na skanery antywirusowe, które monitorują połączenia sieciowe, które czasami mogą się opóźnić, co często jest widoczne po włączeniu procesora.

2

Zawieszone oznacza, że ​​oczekuje na zasób i zostanie wznowione, gdy otrzyma zasób. Sądząc po rozmiarach, które wycofujesz, wygląda na to, że jesteś w zapytaniu typu OLAP.

Spróbuj następujące rzeczy:

  1. Zastosowanie NOLOCK lub ustawić transakcję izolacji LEVEL na szczycie zapytaniu
  2. Sprawdź swój plan wykonania kwerendy i dostroić się być bardziej wydajny
Powiązane problemy