Wir haben die Benutzer- und Systemdatendateien auf demselben Laufwerk. Das (io_stall_write_ms / (1.0 + num_of_writes)) liegt unter 2 für die Benutzerdateien, aber die Tempdb-Dateien liegen normalerweise über 400. Ich sehe das auf einigen Servern und bin gespannt, ob es einen Grund gibt, warum das Schreiben in Tempdb länger dauert als eine reguläre Datenbank-Datendatei.
SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory,
( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result,
io_stall_write_ms, num_of_writes,
fs.database_id,
fs.[file_id]
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id
AND fs.[file_id] = mf.[file_id]
Vielen Dank,
Antworten:
Kurze Antwort: Höhere IO-Stalls zu sehen, kann an sich ein Problem sein oder auch nicht. Sie müssen sich weitere Informationen ansehen, um herauszufinden, ob Sie ein Problem haben. Es scheint ein bisschen hoch, ja, aber leidest du? Wenn ja, liegt es wahrscheinlich daran, dass Ihr E / A-System die Last nicht richtig verarbeitet (weil dies nicht möglich ist, weil Sie alles auf einem Laufwerk haben oder aus einem anderen Grund), oder dass Sie zu viel in TempDB tun (Änderung des ersten Problems - die IO-Leistung - ist wahrscheinlich eine einfachere und effizientere Lösung, aber stellen Sie zuerst fest, ob Sie ein Problem haben.)
Die längere Diskussion / Antwort:
Hier spielen zwei Fragen eine Rolle:
1.) Was mache ich, wenn ich hohe IO-Stalls sehe?
Zunächst einmal ist "hoch" im Auge des Betrachters. Wenn Sie 10 Datenbankadministratoren fragen, was "zu hoch" für E / A-Stände ist, erhalten Sie wahrscheinlich 2-3 verschiedene Antworten mit Zahlen, 5-6 "Es hängt davon ab" -Antworten und einen leeren Blick. Ich gehe davon aus, dass der Durchschnitt von 400 ms hier möglicherweise zu hoch ist, insbesondere wenn die anderen DBs für die durchschnittliche Stillstandszeit 2 ms oder weniger betragen.
Unabhängig davon, in welcher Datenbank die hohen Stände angezeigt werden, sollten Sie auf die gleiche Weise vorgehen. Ein E / A-Stillstand ist das, wonach es sich anhört ... Eine E / A-Anforderung dauert länger als erwartet .. Stillstand. Diese passieren. Sie passieren die ganze Zeit in einem System mit gemeinsam genutzten Ressourcen und begrenzten Ressourcen (wirklich alle unsere Systeme). Sie werden zu einem Problem, wenn die Stände zu Leistungsproblemen werden oder zu diesen führen. Ich vertraue daher darauf, dass Sie hier einen proaktiven Teil der Überwachung betrachten oder Leistungsprobleme haben, die Sie beheben. Wir wollen uns auch nicht nur in IO-Ständen verlieren. Wir betrachten ein Puzzleteil und nicht das Gesamtbild. Es kann mühsam sein, nur Wartestatistiken oder Dateistatistiken seit dem letzten Neustart von SQL zu betrachten, da Sie immer auf der Suche sind und einige Wartungsfenster oder Fenster mit hoher Auslastung die Zähler verzerren können. Achten Sie also darauf, dass Sie das ganze Bild sehen.
Wenn ich jedoch den Verdacht habe, dass ich ein Leistungsproblem mit der Festplatte habe oder bei einer Abfrage wie dieser ein Problem auftreten kann, befolge ich normalerweise einen Vorgang, der wie folgt aussieht:
PAGEIOLATCH_*
,IO_COMPLETION
,WRITELOG
, usw.?). Wenn Sie dies tun, ist dies ein weiterer Hinweis darauf, dass Sie einige E / A-bezogene Leistungsprobleme haben, genau wie die E / A-Blockierungen. Aber es gibt Ihnen hier eine andere Form der Vereinbarung.Physical Disk:Avg Disk Sec/Read
und -Zähler von perfmon anAvg Sec Disk Sec/Write
. Diese messen Ihre Latenz. Überwachen Sie diese Leistungsindikatoren über einen Zeitraum, der in einer Leistungsprotokolldatei gespeichert ist. Was haben Sie durchschnittlich gesehen? Wenn Sie Zahlen über 0,020 Sekunden (20 ms) sehen, kann dies ein Problem sein. Wenn Zahlen über 40-50 ms oder höher angezeigt werden, deutet dies eher auf ein Problem hin. Sehen Sie sich auch Ihre Spikes an? Wie hoch gehen sie und wie lange dauern sie? Wenn Sie Spitzen in den Hunderten von ms sehen und diese Dutzende oder Dutzende von Sekunden oder länger andauern und / oder häufig auftreten, ist die Wahrscheinlichkeit höher, dass Sie ein Problem mit Ihrer E / A-Leistung für Ihre Arbeitslast haben.( Hinweis: Sehen Sie sich für diese Wartestatistik- und Perfmon-Analyse verschiedene Zeiträume und Nutzungsarten an. Haben Sie nachts andere Nutzungsstatistiken als tagsüber? Stapelverarbeitungsfenster? Wartungsfenster, in denen Sie viele Indizes neu erstellen? Schauen Sie sich diese Tools in jedem dieser Zeiträume an und verstehen Sie, was Sie jeweils sehen.
Eine weitere Überlegung zur IO-Leistung hier -
2.) Aus welchen Gründen könnte TempDB höher sein?
TempDB ist also eine Datenbank und kann wie jede andere Datenbank, die ich gerade besprochen habe, IO-Stalls haben. Aber aus welchen Gründen kann TempDB höhere Lesezugriffe haben? (Nicht erschöpfend, ich freue mich über Ergänzungen oder Überlegungen zu Änderungen, anderen Antworten oder Kommentaren.) -
Der springende Punkt ist: TempDB wird auf vielfältige Weise verwendet, und es überrascht mich überhaupt nicht, wenn ich es als eine Ihrer am stärksten ausgelasteten, wenn nicht sogar am stärksten ausgelasteten Datenbanken betrachte. Es überrascht mich auch nicht, wenn ich sehe, dass es die höchste Anzahl und den höchsten Durchschnittsstand aller Datenbanken bei einem Kunden gibt. Manchmal liegt es an der Art der Arbeitsbelastung. Wenn Sie sich einige der hier erwähnten Punkte ansehen, können Sie mit Sicherheit feststellen, ob diese Zahlen auf ein Problem hinweisen, und wenn ja, wie Sie es genauer lösen können.
quelle
TempDB wird von allen Datenbanken in der Instanz gemeinsam genutzt. Daher kann es in TempDB manchmal zu Konflikten mit bestimmten Seiten kommen: SGAM , GAM und PFS . Kurz gesagt, auf diesen Seiten wird nachverfolgt, was in TempDB bisher verwendet wurde und wo Speicherplatz für eine neue Verwendung verfügbar ist.
In der Regel wird dies durch Hinzufügen mehrerer Datendateien zu TempDB behoben. Es gibt ein paar verschiedene Philosophien bezüglich der richtigen Anzahl, aber alle sind sich einig, dass Sie mehr als eine haben sollten.
Hier sind ein paar Fragen zum Ausführen ...
Dieser zeigt Ihnen, wie viele Dateien TempDB hat und wo sie sich befinden.
Dieser zeigt Ihnen, wie viele CPUs und Kerne Sie haben.
Dieser zeigt Ihnen, wie viele NUMA-Knoten und Kerne pro NUMA-Knoten Sie haben.
Dieser zeigt Ihnen, auf welchen Seiten in TempDB gewartet wird.
Hier ist ein Artikel, der das Problem der Seitenkonflikte etwas ausführlicher behandelt.
OK, also jetzt der Philosophieteil ... :-)
Wenn ich mich auf einem SMP- System befinde , möchte ich nur so viele Dateien wie die Hälfte aller Kerne .
Wenn ich auf einem NUMA- System bin, möchte ich nur so viele Dateien wie Kerne pro NUMA-Knoten .
Ich sehe jedoch selten eine Verbesserung, wenn ich mehr als vier Dateien für TempDB habe. Daher beginne ich normalerweise mit vier und überwache die Konflikte, wie in dem Artikel, auf den ich verlinkt habe, erläutert.
Wenn ich weiterhin Probleme sehe, würde ich zwei weitere hinzufügen. Überprüfen Sie erneut, fügen Sie weitere hinzu, und wiederholen Sie den Vorgang, bis der Konflikt verschwindet.
quelle