Wir haben eine Kundendatenbank, die stark fragmentiert ist - praktisch jede Tabelle mit mehr als 1000 Seiten weist eine Fragmentierung von> 95% auf. Füllfaktoren werden auf sinnvolle Werte gesetzt, aber die Nutzung des Seitenbereichs ist für die meisten Tabellen bei weitem kein Füllfaktor.
Dies ist das Ergebnis einer fehlenden Wartung der Datenbank.
Durch die Neuerstellung der Indizes mit Ola Hallengrens IndexOptimize wird die Fragmentierung wie erwartet reduziert. Auf der vorhandenen Produktionshardware verbessert sich die Leistung der Anwendung wie erwartet. Alle Metriken, die ich normalerweise verwende - Client-Statistiken zu umfangreichen Abfragen, Profiler-Dauer, Lese- / Schreibstillständen, Anwendungsprotokollen und Benutzerwahrnehmung - weisen auf eine verbesserte Leistung hin.
Ein neuer Datenbankserver mit Intel PCIe-SSDs zeigt jedoch das Gegenteil von dem, was wir erwarten. Die Anwendung ist stark fragmentiert und bietet eine gute Leistung. Nach dem Wiederherstellen von Indizes ist die Leistung der Anwendung schlecht. Einige Operationen, die ~ 90s dauerten, dauern jetzt ~ 6 Minuten. Keine der anderen Metriken scheint jedoch darauf hinzudeuten, dass das System langsamer läuft.
Ist das etwas, was jemand anderes erlebt hat?
quelle
STATISTICS IO
Read Ahead Reads / Physical Reads, um festzustellen, ob die 6-Minuten-Abfrage überhaupt von der Disc liest.Antworten:
Ja, das Neuerstellen von Indizes (insbesondere auf SSDs) kann zu einer schlechteren Leistung führen. Die meisten Hochgeschwindigkeits-SSDs bevorzugen viele kleinere Blockanforderungen anstelle weniger größerer Anforderungen. Dies ist genau das entgegengesetzte Muster, das von traditionellem Spinnrost bevorzugt wird.
Angenommen, Sie haben einen stark fragmentierten B-Baum. Da auf der Festplatte nichts bestellt ist, werden in der Regel viele 8-KB-E / A-Anforderungen zum Scannen des Baums ausgegeben. Wenn Sie den Baum defragmentieren, können Sie in einer einzigen Anforderung bis zu 512 KB abrufen. Diese großen Anforderungen haben eine höhere Latenz auf der SSD, da die SSD sie intern in 8-KB-Blöcke aufteilt (im Gegensatz zu einer Festplatte, die eine sequentielle E / A ausgibt). Für sehr viele Fälle: Höhere Festplattenlatenz = langsamere Abfragen
Stellen Sie dennoch sicher, dass Sie sicherstellen, dass Sie tatsächlich dieselben Abfragepläne erhalten, die Sie vor der Neuerstellung erhalten haben.
Und schließlich: Wenn Sie nicht über genügend Speicherplatz verfügen, warum verschwenden Sie Ihre wertvolle DBA-Zeit mit Indexwiederherstellungen, wenn Sie auf einer SSD ausgeführt werden?
quelle
Eine wahrscheinliche Ursache ist, dass die nach dem Wiederaufbau geänderte (vermutlich reduzierte) Größe der Strukturen bedeutet, dass der Optimierer einen anderen Plan wählt. Eine der wichtigsten Eingaben in das Kalkulationsmodell des Optimierers ist die Anzahl der Seiten, die jeder Planbetreiber voraussichtlich verarbeiten wird.
Das Ändern der Anzahl der Seiten in einer Struktur kann leicht den Unterschied zwischen der Auswahl eines Hash- oder Merge-Joins durch den Optimierer und einer Strategie für verschachtelte Schleifen (mit oder ohne Spool) ausmachen. Das ist nur ein Beispiel; Kostenunterschiede können sich auf alle Aspekte der Planauswahl auswirken, einschließlich der Entscheidung, ob Parallelität verwendet wird oder nicht.
Um die Art von Leistungsunterschieden zu machen, die Sie beobachten (und auch das Fehlen physischer E / A berücksichtigen), scheint dies die wahrscheinlichste Erklärung zu sein (vorausgesetzt, Sie können das "schlechte" Parameter-Sniffing eliminieren).
Ohne Details (idealerweise Pläne und detaillierte Metriken für eine einzelne Instanz des Problems vor und nach dem Wiederaufbau) ist die aktuelle Frage wohl sehr meinungsbasiert, was sie für diese Site nicht zum Thema machen würde.
quelle