Co to jest typ oczekiwania PAGEIOLATCH_SH w programie SQL Server?

98

Mam zapytanie, które zajmuje dużo czasu w trakcie transakcji. Kiedy rozumiem, wait_typeproces to jest PAGEIOLATCH_SH.

Co oznacza ten typ oczekiwania i jak można go rozwiązać?

Ryan
źródło

Odpowiedzi:

118

Z dokumentacji Microsoft :

PAGEIOLATCH_SH

Występuje, gdy zadanie oczekuje na zatrzask dla buforu, który znajduje się w I/Ożądaniu. Żądanie zatrzasku jest w trybie współdzielonym. Długie oczekiwania mogą wskazywać na problemy z podsystemem dyskowym.

W praktyce dzieje się tak prawie zawsze z powodu dużych skanów na dużych stołach. Prawie nigdy się to nie zdarza w zapytaniach, które efektywnie używają indeksów.

Jeśli Twoje zapytanie jest takie:

Select * from <table> where <col1> = <value> order by <PrimaryKey>

, sprawdź, czy masz indeks złożony (col1, col_primary_key).

Jeśli go nie masz, będziesz potrzebować pełnego, INDEX SCANjeśli PRIMARY KEYwybrano opcję, lub SORTjeśli col1wybrano indeks .

Oba są I/Ooperacjami wymagającymi dużej ilości dysku na dużych tabelach.

Quassnoi
źródło
To naprawdę proste zapytanie. Wybierz * z <table>, gdzie <col1> = <value> order by <PrimaryKey>. Mamy również indeks tylko na col1 i próbowaliśmy odbudować indeks.
Ryan
Czy możesz zasugerować jakieś zasoby, które pomogą Ci zrozumieć, co jest intensywne dla dysku, co wymaga pełnego skanowania indeksu, co wymaga sortowania itp.
Greg B,
1
@GregB: jeśli masz już podstawową wiedzę na temat SQL, możesz przeczytać książki Joe Celko (wszystkie, ale szczególnie SQL for Smartiesi Thinking in Sets) i oczywiście mój blog :)
Quassnoi
3
To wskazywało na błąd w naszym podsystemie dyskowym. Dysk RAID uległ awarii bez wyzwalania systemu monitorowania. Sprawdzanie dzienników zdarzeń wykazało, że SMART rzeczywiście oznaczył dysk jako uszkodzony.
Gomibushi
7

PAGEIOLATCH_SH Typ wait zwykle pojawia się w wyniku pofragmentowanego lub niezoptymalizowanego indeksu.

Często powodem nadmiernego PAGEIOLATCH_SHczekania są:

  • Podsystem we / wy ma problem lub jest źle skonfigurowany
  • Przeciążony podsystem we / wy przez inne procesy, które powodują wysoką aktywność we / wy
  • Złe zarządzanie indeksem
  • Nieporozumienie dotyczące dysku logicznego lub fizycznego
  • Problemy z siecią / opóźnienia
  • Presja pamięci
  • Synchronous Mirroring i AlwaysOn AG

Aby spróbować rozwiązać problem z wysokim PAGEIOLATCH_SHtypem oczekiwania, możesz sprawdzić:

  • SQL Server, zapytania i indeksy, ponieważ bardzo często można to znaleźć jako główną przyczynę nadmiernych PAGEIOLATCH_SHtypów oczekiwania
  • W przypadku obciążenia pamięci przed przejściem do rozwiązywania problemów z podsystemem we / wy

Zawsze należy pamiętać, że w przypadku wysokiego bezpieczeństwa Mirroring lub synchronicznej dostępności zatwierdzania w AlwaysOn AG PAGEIOLATCH_SHmożna spodziewać się wzrostu / nadmiernej ilości .

Więcej informacji na temat tego tematu można znaleźć w artykule Obsługa nadmiernych typów oczekiwania PAGEIOLATCH_SH programu SQL Server

G. Hunt
źródło