Ich habe eine Abfrage, die mitten in einer Transaktion lange dauert. Wenn ich wait_type
den Prozess bekomme , ist es PAGEIOLATCH_SH
.
Was bedeutet dieser Wartetyp und wie kann dies behoben werden?
quelle
Ich habe eine Abfrage, die mitten in einer Transaktion lange dauert. Wenn ich wait_type
den Prozess bekomme , ist es PAGEIOLATCH_SH
.
Was bedeutet dieser Wartetyp und wie kann dies behoben werden?
Aus der Microsoft-Dokumentation :
PAGEIOLATCH_SH
Tritt auf, wenn eine Aufgabe in einem Latch auf einen Puffer wartet, der sich in einer
I/O
Anforderung befindet. Die Latch-Anforderung befindet sich im freigegebenen Modus. Lange Wartezeiten können auf Probleme mit dem Festplattensubsystem hinweisen.
In der Praxis geschieht dies fast immer aufgrund großer Scans über großen Tischen. Es kommt fast nie bei Abfragen vor, bei denen Indizes effizient verwendet werden.
Wenn Ihre Anfrage so ist:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
Überprüfen Sie, ob Sie einen zusammengesetzten Index haben (col1, col_primary_key)
.
Wenn Sie keine haben, benötigen Sie entweder eine vollständige, INDEX SCAN
wenn die PRIMARY KEY
ausgewählt ist, oder eine, SORT
wenn ein Index für col1
ausgewählt ist.
Beide sind sehr festplattenintensive I/O
Vorgänge für große Tabellen.
SQL for Smarties
undThinking in Sets
) und natürlich meinen BlogPAGEIOLATCH_SH
Der Wartetyp wird normalerweise als Ergebnis eines fragmentierten oder nicht optimierten Index angezeigt.Oft sind Gründe für übermäßiges
PAGEIOLATCH_SH
Warten:Um zu versuchen, eine hohe
PAGEIOLATCH_SH
Wartezeit zu beheben , können Sie Folgendes überprüfen:PAGEIOLATCH_SH
Wartezeiten angesehen werden kannDenken Sie immer daran, dass im Falle einer hohen Sicherheitsspiegelung oder der Verfügbarkeit von Synchron-Commits in der AlwaysOn AG mit einem Anstieg / Übermaß
PAGEIOLATCH_SH
zu rechnen ist.Weitere Informationen zu diesem Thema finden Sie im Artikel Umgang mit übermäßigen SQL Server PAGEIOLATCH_SH-Wartetypen
quelle