Was ist der Wartetyp PAGEIOLATCH_SH in SQL Server?

96

Ich habe eine Abfrage, die mitten in einer Transaktion lange dauert. Wenn ich wait_typeden Prozess bekomme , ist es PAGEIOLATCH_SH.

Was bedeutet dieser Wartetyp und wie kann dies behoben werden?

Ryan
quelle

Antworten:

116

Aus der Microsoft-Dokumentation :

PAGEIOLATCH_SH

Tritt auf, wenn eine Aufgabe in einem Latch auf einen Puffer wartet, der sich in einer I/OAnforderung 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 SCANwenn die PRIMARY KEYausgewählt ist, oder eine, SORTwenn ein Index für col1ausgewählt ist.

Beide sind sehr festplattenintensive I/OVorgänge für große Tabellen.

Quassnoi
quelle
Es ist eine wirklich einfache Abfrage. Wählen Sie * aus <Tabelle> aus, wobei <col1> = <Wert> nach <PrimaryKey> sortiert ist. Wir haben auch einen Index für nur col1 und haben versucht, den Index neu zu erstellen.
Ryan
Können Sie einige Ressourcen vorschlagen, um zu lernen, was Sie für festplattenintensiv sind, was einen vollständigen Index-Scan erfordert, was eine Sortierung erfordert usw.
Greg B
1
@ GregB: Wenn Sie bereits Grundkenntnisse in SQL haben, können Sie Joe Celkos Bücher (alle, aber besonders SQL for Smartiesund Thinking in Sets) und natürlich meinen Blog
lesen
3
Dies deutete auf einen Fehler in unserem Festplattensubsystem hin. Eine RAID-Festplatte war ausgefallen, ohne das Überwachungssystem auszulösen. Das Überprüfen der Ereignisprotokolle ergab, dass SMART tatsächlich ein Laufwerk als fehlerhaft markiert hatte.
Gomibushi
7

PAGEIOLATCH_SH Der Wartetyp wird normalerweise als Ergebnis eines fragmentierten oder nicht optimierten Index angezeigt.

Oft sind Gründe für übermäßiges PAGEIOLATCH_SHWarten:

  • Das E / A-Subsystem hat ein Problem oder ist falsch konfiguriert
  • Überlastetes E / A-Subsystem durch andere Prozesse, die die hohe E / A-Aktivität erzeugen
  • Schlechtes Indexmanagement
  • Missverständnis des logischen oder physischen Laufwerks
  • Netzwerkprobleme / Latenz
  • Speicherdruck
  • Synchrone Spiegelung und AlwaysOn AG

Um zu versuchen, eine hohe PAGEIOLATCH_SHWartezeit zu beheben , können Sie Folgendes überprüfen:

  • SQL Server, Abfragen und Indizes, da dies sehr häufig als Grund für die übermäßigen PAGEIOLATCH_SHWartezeiten angesehen werden kann
  • Für Speicherdruck, bevor Sie in ein E / A-Subsystem springen. Fehlerbehebung

Denken 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_SHzu rechnen ist.

Weitere Informationen zu diesem Thema finden Sie im Artikel Umgang mit übermäßigen SQL Server PAGEIOLATCH_SH-Wartetypen

G.Hunt
quelle