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ć?
Odpowiedzi:
PAGEIOLATCH_SHWystę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.
SQL for Smartiesi Thinking in Sets) i oczywiście mój blog :)
PAGEIOLATCH_SH Typ wait zwykle pojawia się w wyniku pofragmentowanego lub niezoptymalizowanego indeksu.
Często powodem nadmiernego PAGEIOLATCH_SHczekania są:
Aby spróbować rozwiązać problem z wysokim PAGEIOLATCH_SHtypem oczekiwania, możesz sprawdzić:
PAGEIOLATCH_SHtypów oczekiwaniaZawsze 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