Von Steve Jones
„Die Datenbank ist ausgefallen!“
Das ist wohl der Anruf, vor dem sich jeder DBA fürchtet. Herzklopfen, flauer Magen - und der Reflex, sich sofort mit dem System zu verbinden. Denn wenn die Datenbank nicht mehr reagiert, steht meistens auch die Anwendung still. Egal ob per Handy oder Remote-Laptop: Jetzt zählt jede Minute, um die Ursache zu finden und das Problem zu beheben.
Ich habe schon einige dieser Anrufe erlebt. Die Ursachen waren vielfältig - von Hardware- und Netzwerkproblemen bis hin zu Usern, die keine Änderungen mehr in der Datenbank durchführen konnten.
In einem Fall meldeten mir die User, dass ihre Änderungen nicht gespeichert wurden. Sie konnten das Problem nicht genau benennen, nur dass „etwas mit der Datenbank nicht stimmt“. Also loggte ich mich ein und testete, indem ich mit dem Code aus Listing 1 eine kleine Tabelle erstellte und ein paar Zeilen einfügte. Die Fehlermeldung machte sofort klar: Der Speicherplatz der Datenbankdatei war komplett ausgeschöpft.
Abbildung 1 - Kurzes `CREATE`-Skript mit Fehlermeldung zum Speicherplatz
Zum Glück hatte ich eine saubere Fehlerbehandlung eingebaut, sodass die User den eigentlichen SQL Server-Fehler gar nicht zu sehen bekamen.
Natürlich könnte man einfach den Windows Explorer öffnen und nachsehen, wie viel Speicherplatz noch auf dem Laufwerk frei ist. Hoffentlich sieht es nicht so aus wie in Abbildung 2.
Abbildung 2 - Lokale Festplatte mit 0 freien Bytes
Knapp werdender Speicherplatz ist nicht nur peinlich, sondern schlicht unprofessionell - und ein Signal ans Management, dass der DBA seine Umgebung nicht im Griff hat. Einmal mag man mit einer schnellen Reaktion noch durchkommen, aber wenn es wiederholt passiert, ist das Vertrauen schnell verspielt - im schlimmsten Fall auch der Job. In meinem Fall hatte ich zwar eine Speicherplatzwarnung erhalten, doch die Log- und Datendateien dieser Datenbank wuchsen so schnell, dass die Festplatte voll war, bevor ich eingreifen konnte. Ich konnte das Problem rasch beheben, aber es war eine deutliche Lektion: Unsere Speicherüberwachung musste dringend besser werden.
Wenn klar ist, dass Speicherplatz fehlt, sollten Sie als Erstes die Auto-Growth-Einstellungen der betroffenen Daten- und Log-Dateien prüfen. Ist Auto-Growth deaktiviert, können eine oder beide Dateien ihre Maximalgröße erreicht haben. In diesem Fall hilft es, die Datenbank oder die Log-Dateien manuell zu vergrößern - je nachdem, wo der Engpass liegt.
Wenn Ihre Dateien voll sind und auch das Laufwerk selbst keinen Platz mehr hat, können Sie sie nicht weiter vergrößern. Das ist ein unangenehmer Moment - und ich hoffe, Sie haben Platzhalterdateien angelegt, die Sie löschen können, um schnell Luft zu schaffen. Falls nicht, bleibt Ihnen meist nichts anderes übrig, als nach Dateien zu suchen, die Sie entfernen können. Oft lässt sich Speicherplatz freigeben, indem man alte Backups, Import-/Exportdateien oder Anwendungslogs (z. B. Fehler- oder Ereignisprotokolle) löscht. Liegen Ihre Daten- und Log-Dateien auf einem SAN, können die Administratoren möglicherweise das zugrunde liegende Laufwerk erweitern und Ihnen so zusätzlichen Platz bereitstellen.
Wenn all das nicht funktioniert, gibt es noch die Möglichkeit, eine zusätzliche Daten- oder Log-Datei hinzuzufügen. Dafür brauchen Sie ein weiteres Laufwerk mit genügend freiem Speicherplatz, das Sie am Windows-Host anbinden. Anschließend können Sie mit dem Befehl `ALTER DATABASE` neue Datendateien oder Dateigruppen anlegen und konfigurieren, um den Betrieb Ihrer Datenbank fortzusetzen.
Das Hinzufügen von Dateien oder Dateigruppen auf einem neuen Laufwerk macht Ihr System allerdings komplexer und kann die Wiederherstellung im Ernstfall unübersichtlicher gestalten. Am besten planen Sie gleich ein, diese Notlösung wieder zurückzunehmen, sobald ausreichend Speicherplatz verfügbar ist.
Ein Systemadministrator sollte von einem drohenden Speicherengpass wissen, lange bevor er zu einem echten Problem für die User wird. Der sicherste Weg, damit es nicht so weit kommt, ist: Überwachen Sie die Entwicklung der Speicherauslastung regelmäßig und richten Sie Warnungen ein, die frühzeitig auf Probleme hinweisen.
Auch wenn wir DBAs versuchen, das Datenwachstum realistisch einzuschätzen, gibt es immer wieder unvorhergesehene Schübe - verursacht etwa durch unkontrollierte Datenlasten, deaktivierte Log-Backups oder übergroße Transaktionen. Verhindern können wir das nicht komplett. Aber wir können dafür sorgen, dass wir den Speicherplatz engmaschig überwachen und rechtzeitig gewarnt werden. Frühzeitige Hinweise sind entscheidend, da es in den meisten Unternehmen Zeit braucht, um zusätzlichen Speicherplatz bereitzustellen.
In den nächsten Abschnitten sehen wir uns verschiedene Methoden an, mit denen Sie den verfügbaren Speicherplatz prüfen können - manche davon sind sehr einfach, andere etwas aufwendiger.
Sie können natürlich jeden Tag den Windows Explorer öffnen und den freien Speicherplatz prüfen - zum Beispiel so:
Abbildung 3 - Manuelle Überprüfung des Speicherplatzes im Explorer
Diese Werte lassen sich anschließend in einer Anwendung wie Excel dokumentieren und weiterverfolgen.
Abbildung 4 - Nachverfolgung des SQL-Server-Speicherplatzes in Excel
Sie können Ihre Aufzeichnungen beliebig erweitern: etwa um die Größe des Datenträgers, die Veränderung des Speicherplatzverbrauchs beim Einfügen neuer Daten oder um beliebige Berechnungen, die Excel unterstützt.
Einige Unternehmen überwachen ihren Speicherplatz tatsächlich manuell. Das ist allerdings teuer, fehleranfällig und für den Systemadministrator alles andere als angenehm. Über Monate hinweg mehrere Server per Hand zu kontrollieren, wird schnell zu einer lästigen Pflicht. Menschen sind schlicht nicht gut in monotone, wiederkehrende Aufgaben wie diese - zumindest nicht dauerhaft.
Hinzu kommt die hohe Fehleranfälligkeit: Denkt wirklich jeden Tag jemand an diese Prüfung? Passiert vielleicht ein Tippfehler bei der Dateneingabe? Sind die Warnmeldungen für alle Instanzen und Laufwerke korrekt eingerichtet?
Kurz gesagt: Diese Aufgabe schreit geradezu nach Automatisierung.
Eine schnelle Internetrecherche bringt zahlreiche Skripte hervor, mit denen sich die Überwachung des Speicherplatzes automatisieren lässt. Viele davon nutzen PowerShell oder VBScript, verbinden sich mit den Windows-Hosts, messen den Festplattenplatz und schicken anschließend einen Bericht per E-Mail. In diesem Bericht werden Laufwerke markiert, die unter einen definierten Schwellenwert gefallen sind. Ein typisches Beispiel zeigt Sean Duffys Artikel _Disk Space Monitoring and Early Warning with PowerShell_.
Das ist eine solide Lösung, die sich gut mit Methode 3 kombinieren lässt. Viele Administratoren setzen bewusst auf zwei unabhängige Systeme zur Überwachung, um eine Absicherung zu haben, falls eines einmal ausfällt.
Allerdings bringt eine skriptbasierte Lösung auch Arbeit mit sich: Sie brauchen Programmierkenntnisse für die Entwicklung und später für die Pflege, etwa wenn neue Laufwerke dazukommen. Vielleicht wollen Sie auch historische Daten speichern, um Trends zu erkennen - das erfordert wiederum Logik für Archivierung und Bereinigung. Und früher oder später verlangt jemand nach einem Bericht, den Sie erstellen und immer wieder anpassen müssen. Zwar kostet das Herunterladen oder Schreiben eines Skripts kein Geld, aber Wartung, Erweiterung, Testen und Anpassungen summieren sich über die Zeit zu spürbaren Kosten für eine Organisation.
Für viele Unternehmen ist es kostengünstiger, den Speicherplatz mit einem Monitoring-Tool wie Redgate Monitor zu überwachen. Damit kann der Administrator eine Vielzahl von Warnungen mit individuell einstellbaren Schwellenwerten konfigurieren - darunter auch für den Festplattenspeicher. Gleichzeitig lassen sich Trends leicht erkennen, sodass Probleme frühzeitig sichtbar werden, bevor der Speicher tatsächlich knapp wird.
Nach der Installation von Redgate Monitor sind einige Warnmeldungen bereits standardmäßig aktiv. Dazu gehört auch die Festplattenplatzwarnung, die den Speicherplatz auf allen überwachten Servern im Blick behält. Im Tab „Analyse“ können Sie den aktuellen Speicherplatz Ihrer Datenbanken pro Festplatte einsehen. Im Beispiel habe ich den Fokus auf eine einzelne Datenbank gelegt, wie in Abbildung 5 zu sehen ist.
Abbildung 5 - Datengrößendiagramm für eine einzelne Datenbank in Redgate Monitor
Die Datendatei der `EncryptionPrimer`-Datenbank ist in kurzer Zeit stark angewachsen - verursacht durch einen User, der eine Datei importieren wollte, die sich als deutlich größer als erwartet herausstellte. Bevor der Import abgeschlossen war, lief die Festplatte voll. Eine Situation, die in vielen Unternehmen nicht unüblich ist.
Die große Stärke der Speicherplatzüberwachung liegt in der Möglichkeit, mit Warnungen ein verlässliches „Frühwarnsystem“ aufzubauen. Standardmäßig schlägt Redgate Monitor Alarm, wenn der freie Festplattenspeicher auf einem überwachten Server unter 1 GB fällt (siehe Abbildung 6).
Abbildung 6 - Schwellenwert für die Speicherplatzwarnung in Redgate Monitor
Das ist zwar ein sinnvoller Standardwert, aber persönlich möchte ich schon früher gewarnt werden. Wenn nur noch weniger als 1 GB frei ist, bleibt im Ernstfall nicht genug Zeit, um zu reagieren. Sinnvoller ist es, bereits früher eine Warnung zu bekommen, um rechtzeitig Maßnahmen einzuleiten und Stresssituationen zu vermeiden.
Zum Glück ist Redgate Monitor flexibel. Über den Schieberegler (siehe Abbildung 6) kann ich mehrere Schwellenwerte für Warnungen definieren und mich so deutlich früher benachrichtigen lassen.
Abbildung 7 - Konfiguration mehrerer Schwellenwerte für Speicherplatzwarnungen
Mit solchen Warnstufen kann ich planen, wann ich Platz freimache, die aktuelle Festplattenkapazität erweitere oder neue Festplatten bestelle - noch bevor es kritisch wird. Außerdem lasse ich mir die Warnungen per E-Mail an das Betriebsteam schicken. Gerade bei geschäftskritischen Systemen ist es entscheidend, dass die DBAs rechtzeitig informiert werden.
Wird einer dieser Schwellenwerte überschritten, zum Beispiel durch den Import einer großen Datei, erhalte ich eine klare Warnung, die auch das betroffene Objekt ausweist, in diesem Fall das Laufwerk C:.
Abbildung 8 - Speicherplatzwarnungen für das Laufwerk C:\
Ein Klick auf die Warnmeldung öffnet eine detaillierte Übersicht: belegter Speicherplatz, noch verfügbarer Platz und der Anteil, den meine lokale SQL-Instanz beansprucht. In diesem Beispiel beanspruchen zwar viele andere Dateien den Großteil der Festplatte, doch das schnelle Wachstum dieser einen Datenbank hat letztlich dafür gesorgt, dass der Speicher vollgelaufen ist.
Abbildung 9 - Untersuchung einer Speicherplatzwarnung zur Analyse des belegten Speicherplatzes
Falls mir das Problem zunächst nicht bewusst war, gibt mir Redgate Monitor die Möglichkeit, weitere Metriken und Prozesse einzusehen. So kann ich nachvollziehen, welche Aktivitäten genau zum Zeitpunkt des Vorfalls stattgefunden haben.
Zum Glück hatte ich (wie schon erwähnt) vorsorglich einige Platzhalterdateien auf dem Laufwerk abgelegt. Durch einfaches Löschen dieser Dateien konnte ich das akute Problem sofort lösen und weiteres Wachstum der Daten- und Log-Dateien ermöglichen.
Im Anschluss würde ich mit dem User sprechen, der die Dateien importiert hat, und den künftigen Speicherplatzbedarf dieser Datenbank neu einschätzen. Mein Ansatz ist, sicherzustellen, dass jede meiner Datenbanken genügend Speicher für die nächsten 90-120 Tage hat. Dazu vergrößere ich die Dateien alle ein bis zwei Monate vorausschauend, um das erwartete Wachstum abzudecken.
Zusätzlich könnte ich überlegen, detailliertere Warnungen für diese Datenbank einzurichten - etwa durch die Integration einer der benutzerdefinierten Metriken, die unter SQLMonitorMetrics.red-gate.com verfügbar sind.
Wenn auf einem Laptop der Speicherplatz knapp wird, ist das zwar ärgerlich, aber meist finden wir schnell ein paar Dateien zum Löschen. Auf einem Server hingegen kann so etwas die gesamte Arbeit lahmlegen - und für den Systemadministrator äußerst unangenehm sein. Ziel sollte es daher immer sein, solche Situationen mit proaktiver Überwachung zu vermeiden, statt im Notfall Dateien zu löschen und hektisch Speicher freizugeben.
In der Regel wachsen Datenbanken mit einer recht vorhersehbaren Geschwindigkeit. Überwachen Sie deshalb das Daten- und Log-Wachstum regelmäßig und achten Sie auf Ausreißer und ungewöhnliche Trends. Mein Vorgehen: Ich vergrößere Dateien manuell so, dass sie die Datenbank für die nächsten drei bis vier Monate tragen. Dabei kontrolliere ich auch den verfügbaren Speicherplatz auf der Festplatte. Gleichzeitig sind Warnmeldungen für unerwartetes Wachstum unverzichtbar.
Darüber hinaus empfehle ich, auf jeder Festplatte einige 1-GB-Dateien als Platzhalter vorzuhalten, die Sie im Notfall löschen können. Zur Erstellung solcher Dateien eignet sich das Microsoft-Tool contig.exe, das ich Ihnen für alle Laufwerke ans Herz legen würde.
Für weitere Informationen über Redgate Monitor, eine Demo oder Best Practices nehmen Sie gern Kontakt mit uns auf.
Seit mehr als 25 Jahren entwickelt Redgate spezialisierte Software für Datenbanken. 92 % der Fortune-100-Unternehmen setzen auf unsere Lösungen. Insgesamt vertrauen uns über 200.000 Kunden weltweit.
Redgate bietet eine umfassende Dokumentation und ein kompetentes, engagiertes Support-Team. Im Schnitt bewerten 87 % unserer Kundinnen und Kunden unseren Support mit „Ausgezeichnet“.