Welche Häufigkeit von Hash- / Sortierüberläufen in Tempdb ist von Bedeutung?

10

Unsere Unternehmensanwendung verwendet SQL Server zur Datenspeicherung und ist in erster Linie ein OLTP-System. Eine wichtige Komponente unserer Anwendung erzeugt jedoch eine erhebliche OLAP-Arbeitslast.

Unsere Schreiblatenz für Tempdb beträgt ca. 100 ms. Dieser Trend hält im Laufe der Zeit an und ALLOW_SNAPSHOT_ISOLATIONist ausgeschaltet . Wir beheben dieses Problem und das einzig Interessante, das wir bisher gefunden haben, ist, dass es eine erhebliche Anzahl von Hash- und Sortierverlusten in Tempdb gibt. Wir vermuten, dass dies auf unsere OLAP-Arbeitslast zurückzuführen ist.

Frage

Welche Häufigkeit von Verschüttungen betrifft? Irgendein? Wie viele Verschüttungen / Sek.? Unsere vorläufigen Daten zeigen, dass wir ungefähr 2 Hash-Spills pro Sekunde und 25 Sort-Spills pro Minute haben.

Ist es möglich, dass diese Häufigkeit von Verschüttungen ein Hauptverursacher unserer hohen Tempdb-Schreiblatenz ist?

Andere Informationen

Wir verwenden mehrere Dateien für Tempdb, wie pro Anzahl der Kerne empfohlen. Die Tempdb-Dateien befinden sich in einem RAID 1 + 0-SAN (mit Hochleistungs-SSDs), dies ist jedoch dasselbe Gerät wie die Hauptdaten- und Protokolldateien der Datenbank. Die Tempdb-Dateien sind so groß, dass sie sehr selten wachsen. Wir verwenden keine Trace-Flags 1117 oder 1118. Eine andere Variable ist, dass diese Einrichtung für eine Reihe verschiedener Datenbanken gemeinsam genutzt wird, die alle eine mittlere bis hohe Last aufweisen.

Unsere Schreiblatenz von 100 ms ist viel größer als die akzeptablen Bereiche für die Tempdb-Schreiblatenz, die wir auf MSDN, SQL Skills und anderen Websites gefunden haben. Die Schreiblatenz für unsere anderen Datenbanken ist jedoch gut (unter 10 ms). Basierend auf anderen Statistiken scheint es, dass wir Tempdb stark verwenden, insbesondere für interne Objekte. Wir versuchen herauszufinden, warum unsere Anwendung so häufig interne Objekte verwendet.

Wir haben echte Leistungsprobleme auf unserer Plattform, die sich auf unterschiedliche Weise manifestieren. Wir haben Leistungsindikatoren überwacht, DM-Ansichten betrachtet und unser App-Verhalten analysiert, um zu versuchen, die Ressourcennutzungsmerkmale unseres Systems zu untersuchen. Wir konzentrieren uns derzeit auf Verschüttungen, da wir gelesen haben, dass Verschüttungen drastische negative Auswirkungen haben, da sie auf der Festplatte statt im Speicher ausgeführt werden. Und wir scheinen eine sehr hohe Anzahl von Verschüttungen zu haben, aber ich wollte einen Beitrag dazu leisten, was die Leute als "hoch" betrachten.

Matthew Rodatus
quelle

Antworten:

12

Ist es möglich, dass diese Häufigkeit von Verschüttungen ein Hauptverursacher unserer hohen Tempdb-Schreiblatenz ist?

Ja, es ist möglich , obwohl in der Regel die durchschnittliche Größe der Verschüttungen und ihre Tiefe (dh rekursive Hash-Verschüttungen, Multi-Pass-Sortierungen) wichtiger sind als die Häufigkeit an sich.

SQL Server bietet eine breite Palette von Metriken und DMV-Informationen, mit denen Sie die verschiedenen Faktoren beheben können, die zum Tempdb-Druck beitragen. Viele davon werden im Microsoft-Technischen Artikel "Arbeiten mit Tempdb in SQL Server 2005" erläutert (gilt für alle Versionen ab 2005) ).

Sie sollten in der Lage sein, anhand der in diesem Dokument enthaltenen Anleitungen und Diagnoseabfragen die Hauptursachen für Tempdb-Druck zu ermitteln. Ignorieren Sie zB die Aktivität des Versionsspeichers nicht, nur weil sie ALLOW_SNAPSHOT_ISOLATIONnicht aktiviert ist. Viele Funktionen verwenden den Versionsspeicher (z. B. Trigger, MARS, RCSI), abgesehen von der Snapshot-Isolation.

Wenn sich Sortier- und Hash-Verschüttungen auf hohem Niveau als signifikant herausstellen, müssen Sie wahrscheinlich eine spezielle Überwachung dafür einrichten. Abhängig von Ihrer SQL Server-Version ist dies nicht immer einfach, wie man hoffen könnte. Um Sortier- und Hash-Verschüttungen mit der bestimmten Abfrage zu verbinden, die sie verursacht hat, sind Ereignisbenachrichtigungen oder erweiterte Ereignisse erforderlich. Der SolidQ-Artikel " Identifizieren und Lösen von Sortierwarnungen " enthält Details und einige gute allgemeine Ratschläge zur Behebung häufiger Ursachen.

Sie sollten auch mit Ihrem Speicherteam zusammenarbeiten, um festzustellen, wie viel der hohen Latenz auf Ihre Arbeitslast zurückzuführen ist, wie viel von anderen gemeinsam genutzten Verwendungen stammt und welche Optionen für die Neukonfiguration verfügbar sind. Ihre Analyse der SQL Server-Metriken wird Ihnen dabei helfen, diese Diskussion zu informieren, ebenso wie alle Metriken, die die SAN-Mitarbeiter bereitstellen können.

Paul White 9
quelle