Mam zapytanie, które zajmuje dużo czasu w trakcie transakcji. Kiedy rozumiem, wait_type
proces to jest PAGEIOLATCH_SH
.
Co oznacza ten typ oczekiwania i jak można go rozwiązać?
Odpowiedzi:
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 SCAN
jeśli PRIMARY KEY
wybrano opcję, lub SORT
jeśli col1
wybrano indeks .
Oba są I/O
operacjami wymagającymi dużej ilości dysku na dużych tabelach.
SQL for Smarties
i 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_SH
czekania są:
Aby spróbować rozwiązać problem z wysokim PAGEIOLATCH_SH
typem oczekiwania, możesz sprawdzić:
PAGEIOLATCH_SH
typów oczekiwaniaZawsze należy pamiętać, że w przypadku wysokiego bezpieczeństwa Mirroring lub synchronicznej dostępności zatwierdzania w AlwaysOn AG PAGEIOLATCH_SH
moż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