Ich weiß, dass es wirklich drei Arten von Fragmentierung gibt, um die ich mich als DBA kümmern muss:
Index Fragmentation in den SQL - Datendateien, einschließlich Cluster - Index (Tabelle) Fragmentierung. Identifizieren Sie dies mit DBCC SHOWCONTIG (in SQL 2000) oder sys.dm_db_index_ physical_ stats (in 2005+).
VLF-Fragmentierung in SQL-Protokolldateien. Führen Sie DBCC LOGINFO aus, um festzustellen, wie viele VLFs sich in jeder Ihrer SQL-Protokolldateien befinden.
Physische Dateifragmentierung der Datenbankdateien auf der Festplatte. Diagnostizieren Sie dies mithilfe des Dienstprogramms "Defragmentierung" in Windows. (inspiriert von diesem exzellenten Blog-Beitrag )
Der Indexfragmentierung wird viel Aufmerksamkeit geschenkt (siehe diese ausgezeichnete Serverfault-Antwort von Paul Randall), daher ist dies nicht der Schwerpunkt meiner Frage.
Ich weiß, dass ich eine physische Fragmentierung (und VLF-Fragmentierung) verhindern kann , wenn die Datenbank ursprünglich erstellt wird, indem ich eine angemessene erwartete Datendatei und Protokollgröße plane, da diese Fragmentierung am häufigsten durch häufiges Anwachsen und Verkleinern auftritt, aber ich habe einige Fragen zum Beheben Physische Fragmentierung, sobald sie identifiziert wurde:
Ist die physische Fragmentierung in einem Enterprise-SAN überhaupt relevant? Kann / sollte ich Windows Defragmenter auf einem SAN-Laufwerk verwenden oder sollte das SAN-Team interne Defragmentierungsdienstprogramme verwenden? Ist die Fragmentierungsanalyse, die ich mit dem Windows-Tool erhalte, auch auf einem SAN-Laufwerk genau ?
Wie groß ist die physische Fragmentierung der SQL-Leistung? (Nehmen wir ein internes Laufwerk-Array an, bis das Ergebnis der vorherigen Frage vorliegt.) Handelt es sich um ein größeres Geschäft als um eine interne Indexfragmentierung? Oder ist es wirklich dasselbe Problem (das Laufwerk muss zufällige Lesevorgänge anstelle von sequentiellen Lesevorgängen durchführen)?
Ist das Defragmentieren (oder Neuerstellen) von Indizes eine Zeitverschwendung, wenn das Laufwerk physisch fragmentiert ist? Muss ich den einen reparieren, bevor ich den anderen anspreche?
Was ist der beste Weg, um physische Dateifragmentierung auf einer Produktions-SQL-Box zu beheben? Ich weiß, dass ich SQL-Dienste deaktivieren und Windows Defrag ausführen kann, aber ich habe auch von einer Technik gehört, bei der Sie eine vollständige Sicherung durchführen, die Datenbank löschen und dann von der Sicherung auf ein leeres Laufwerk zurückschreiben. Wird diese letztere Technik empfohlen? Baut das Wiederherstellen von einer solchen Sicherung auch Indizes von Grund auf auf und beseitigt die interne Indexfragmentierung? Oder wird die Seitenreihenfolge einfach auf den gleichen Wert zurückgesetzt, als die Sicherung erstellt wurde? (Wir verwenden Quest Lightspeed-Backups mit Komprimierung, falls dies von Bedeutung ist.)
UPDATE : Gute Antworten zur Defragmentierung von SAN-Laufwerken (NO) und zur Frage, ob sich die Indexdefragmentierung auf physisch fragmentierten Laufwerken noch lohnt (YES).
Möchte noch jemand die besten Methoden für die eigentliche Defragmentierung abwägen? Oder eine Schätzung der zu erwartenden Zeitdauer für die Defragmentierung eines großen fragmentierten Laufwerks, z. B. 500 GB oder so? Relevant, offensichtlich, weil das die Zeit ist, in der mein SQL Server ausfällt!
Auch wenn jemand irgendwelche anekdotischen Informationen über SQL-Leistungsverbesserungen hat, die Sie durch das Reparieren der physischen Fragmentierung vorgenommen haben, wäre das großartig. In Mikes Blogpost geht es darum, das Problem aufzudecken, aber es ist nicht spezifisch, welche Art von Verbesserung es bewirkt hat.