SQL Server-Dienst (e) stoppen, bevor Laufwerk defragmentiert wird?

8

Die Datendateien unserer Produktions-SQL Server 2005-Datenbank befinden sich auf einem separaten physischen Laufwerk, das vom Microsoft Windows 2003-Tool zum Defragmentieren als zu 99% fragmentiert gemeldet wird.

Wir haben eine Aufgabe geplant, um diese Fahrt an einem Samstagmorgen um 3:00 Uhr morgens zu defragmentieren. Der Auftrag wurde nach 40 Minuten ohne erkennbare Fehler abgeschlossen. Das Laufwerk bleibt jedoch stark fragmentiert.

Sollten wir SQL Server-Dienste vor der Defragmentierung gestoppt haben?

KONTEXT

Pro Kontextanforderungen: Wir haben eine Microsoft SQL Server 2005-Instanz (9.00.5324.00), auf der 32-Bit-Windows Server 2003 (SP2) auf Dell PowerEdge 2950-Hardware (ca. 2007) mit 4 GB RAM ausgeführt wird. Das PowerEdge 2950 verfügt über vier 68-GB-Laufwerke, die als RAID-1 konfiguriert sind, um zwei virtuelle 68-GB-Festplatten zu erstellen: (1) C (Start und Betriebssystem) & D (Auslagerungsdatei, verschiedene andere Daten); und (2) E (SQL-Daten). Meines Wissens haben IT-Mitarbeiter keines dieser Laufwerke defragmentiert ... Disk Defragmenter meldet eine Dateifragmentierung von 66% (C), 77% (D) und 99% (E). Der Leistungsmonitor meldet die folgenden durchschnittlichen Ergebnisse: "Auslagerungsdatei:% Auslastung" = ~ 6,8% ; "SQL Server: Buffer Manager - Seitenlebenserwartung" = 20 Sekunden ; und "PhysicalDisk: Avg. Disk sec / write, Laufwerk E" = zwischen 300 und 1,. Wir werden in ein paar Monaten ein dringend benötigtes Hardware- und SQL Server-Upgrade durchführen müssen (nämlich neue Hardware, 64-Bit-Windows Server 2012, 64-Bit-SQL Server 2012, 12 GB RAM), aber aufgrund von End- Benutzerleistung, möchten das Problem so weit wie möglich lindern. Daher könnte das Denken einer Dateidefragmentierung für Laufwerk E, das Haupt-SQL-Datenlaufwerk, hilfreich sein.

Abgesehen davon haben wir letzte Woche zwei ausgefallene Laufwerke gezogen und das Array neu aufgebaut ... nicht sicher, ob das wichtig ist. Wir arbeiten mit einem anderen IT-Team zusammen, um den Server zu warten, sodass wir keinen direkten Zugriff auf die Geräte haben. Unsere Organisation zahlt nur für die Dienstleistungen.

Wir können uns die Ausfallzeit bei regelmäßig geplanten Wartungsfenstern (wöchentlich) sowie bei Bedarf über Nacht Ausfallzeiten außerhalb des Bandes leisten.

Iokevins
quelle
6
Haben Sie eine Messung, die darauf hinweist, dass die Fragmentierung der physischen Festplatte erhebliche Auswirkungen hat? Können Sie sich die Ausfallzeit leisten?
Remus Rusanu
2
@RemusRusanu - wie kann man wissen, ob sich ein bestimmter Fragmentierungsgrad insgesamt negativ auf das System auswirkt, ohne es tatsächlich zu defragmentieren? Das Überprüfen der Anzahl der geteilten E / A über den Leistungsmonitor kann hilfreich sein, obwohl es schwierig sein wird, dies mit der Aktivität in SQL Server zu korrelieren. Dies ist übrigens nicht als Konfrontation gedacht - ich bin wirklich neugierig!
Max Vernon
4
@ MaxVernon: Theoretisch denke ich, XPerf . Sie können auch nebeneinander messen, indem Sie eine nicht fragmentierte Datenbank auf derselben Festplatte erstellen und eine erfasste Arbeitslast ausführen. Aus praktischen Gründen ist die Wahrscheinlichkeit, dass die vorherrschenden Leistungsprobleme in der App auftreten, im Vergleich zu Fragmentierung überwältigend.
Remus Rusanu
3
Meine Erfahrung sagt mir, dass ich 99 Mal von 100 (oder mehr) definitiv zustimmen würde. Leistungsprobleme sind weitaus wahrscheinlicher auf ORM zurückzuführen, die SELECT *überall durchgeführt werden, oder auf andere Fehlverhalten.
Max Vernon
1
Bevor Sie weitere Änderungen vornehmen und vor allem eine Defragmentierung versuchen, möchten Sie sicherstellen, dass die Arrays vollständig neu erstellt wurden. Und ein Ratschlag für Ihr neues System: Holen Sie sich so viel RAM, wie Sie sich leisten können. Sie möchten so viel von Ihren regelmäßig aufgerufenen SQL-Daten im Speicher haben, da der RAM 1000-mal schneller ist als die schnellsten Festplatten.
Max Vernon

Antworten:

2

Ich persönlich habe Raxco PerfectDisk (in keiner Weise mit dem Unternehmen oder einem seiner Mitarbeiter verbunden) verwendet, um Online-Defragmentierungen von SQL Server-LUNs durchzuführen. Funktioniert einwandfrei, wenn der Server dadurch etwas langsamer wird. Ich würde empfehlen, dies in Zeiten geringerer Aktivität zu tun. Wenn ich "funktioniert einwandfrei" sage, beziehe ich mich darauf, dass das Volume oder die SQL-Datendateien nicht beschädigt werden.

Der eingebaute Defragmentierer leistet sehr schlechte Arbeit, wenn bestimmte Strukturen auf dem Laufwerk fragmentiert sind. PerfectDisk zeigt Ihnen Details zu allen fragmentierten Elementen, einschließlich der NTFS-Zuordnungstabellen, Verzeichnisse, alternativen Dateistreams usw. usw.

Defragmentiert PerfectDisk SQL-Datenbanken? http://support.raxco.com/KB/a106/does-perfectdisk-defragment-sql-databases.aspx

Informationen zu SQL Server und zur Fragmentierung finden Sie in dieser Archivkopie des Technet News Magazine: http://web.archive.org/web/20100803204458/http://www.microsoft.com/technet/abouttn/flash/tips/tips_083104.mspx

Max Vernon
quelle
2
Aber Remus 'Kommentar hat viel mehr Wert als nur auf ein Produkt zu verweisen. Ich glaube nicht, dass ich jemals eine Windows-Festplatte defragmentiert habe, auf der SQL ausgeführt wurde, und habe nie einen starken Hinweis darauf gesehen, dass ich dies tun musste. Windows kann sagen, dass ein Laufwerk fragmentiert ist. Wichtig ist jedoch, ob bei SQL Server Probleme auftreten. In vielen Fällen vermute ich, dass dies wirklich keine Rolle spielt und dass Defrags auf Dateisystemebene überhaupt nicht ausgeführt werden müssen. Sie sagen, es funktioniert "perfekt", aber haben Sie tatsächlich eine messbare Verbesserung beobachtet? Können Sie Details angeben?
Aaron Bertrand
1
Ich bin damit einverstanden, Aaron, dass die physische Fragmentierung auf einem ansonsten ordnungsgemäß entwickelten SQL Server in den meisten Fällen nur minimale Auswirkungen hat. Selbst wie in diesem Fall, in dem der Benutzer eine 99% ige Fragmentierung meldet. Wenn der Benutzer seine SQL-Datenbanken jedoch auf derselben LUN wie das Betriebssystem hat und sich diese zufällig auf einer einzelnen Festplatte oder einem RAID-Array mit einer kleinen Anzahl von Spindeln befindet, kann sich eine wirklich übermäßige Fragmentierung auswirken.
Max Vernon
1
Mit "wirklich übertrieben" meine ich Tausende und Abertausende von Fragmenten. Denken Sie Hunderttausende. Ich habe das gesehen. Nicht dass ich stolz wäre oder so!
Max Vernon
Wie Brent Ozar sagte, hat eine physische Defragmentierung (und tatsächlich eine logische SQL-Defragmentierung) wahrscheinlich keine messbaren positiven Auswirkungen auf die Gesamtheit, wenn Sie Ihre SQL-Datenbanken in einem SAN ausführen, in dem die Daten von einem riesigen RAID-Array gemeinsam genutzt werden Leistung des Systems.
Max Vernon
Ich markiere dies als die beste aktuelle Antwort, da es "Ja" scheint, wenn wir das richtige Werkzeug verwenden. Vielen Dank!
Iokevins
7

Ihr Problem ist nicht die Festplattenfragmentierung. Ihr Problem sind RAM- und Anwendungstabellen-Scans:

4 GB RAM ... 68 GB ... Seitenlebensdauer 20 Sekunden

Sie benötigen viel mehr RAM. Wie in Ihrem neuen Server sollte viel, viel, viel, viel mehr als 12 GB haben. Beginnen Sie mit 64 GB, es kostet im Grunde Groschen . Und ja, korrigieren Sie Ihre App, um Indizes zu verwenden. 20 Sekunden sind ein sehr klarer Hinweis auf Tabellenscans, die den Pufferpool in den Papierkorb werfen. Sie müssen die App reparieren, die erforderlichen Indizes hinzufügen und Ihre Abfragen korrigieren . Für Ihren Fall ist die Defragmentierung der Laufwerke genauso ein roter Hering wie rote Heringe.

Oh, und bitte verschieben Sie das Protokoll, um physische Spindeln von Daten zu trennen . Allein.

Remus Rusanu
quelle
Danke Remus; Wenn ich nur die Welt regieren würde ... Wir haben einen Vertrag mit einem Drittanbieter für die App abgeschlossen, der leider nicht unter unserer direkten Kontrolle steht. Ich schätze Ihre Einsicht, danke.
Iokevins
1
Mehr RAM und SSDs können Ihnen den Weg mit einem relativ knappen Budget erleichtern. Aber die App muss repariert werden.
Remus Rusanu
In der Folge hat sich die Leistung nach der Defragmentierung des Laufwerks nur geringfügig verbessert. Remus scheint in seiner Diagnose eines RAM-Problems richtig zu sein.
Iokevins
@RemusRusanu Ist es wichtig zu versuchen, mit Dateien zu optimieren, die auf verschiedenen Festplatten in virtuellen Servern (VMware) abgelegt sind? Dies ist eine allgemeine Frage der Virtualisierung-Ignoranz ...
Diegohb
-4

Brad McGehee beschreibt es hier gut:

http://www.bradmcgehee.com/2011/06/do-you-ever-physically-defragment-your-sql-server-mdf-ldf-files/

... wenn Sie den SQL Server-Dienst während Ihrer Defragmentierung laufen lassen, sind die Datenbankdateien geöffnet und daher überhaupt nicht defragmentiert.

DBA_ANDY
quelle
2
Absolut falsch. Zumindest bei neueren Windows-Versionen. Wie in Windows Server 2003+ oder Windows XP +
Max Vernon
1
Alle Windows-Defragmentierungstools verwenden die System-APIs zum Defragmentieren von Dateien, und zwar auf Clusterebene unterhalb der Dateizugriffs-APIs. Auf diese Weise können Ordner online mit dem Volume defragmentiert werden.
Max Vernon