Tags: Exchange, Datenbanken
Im Laufe der Zeit fragmentiert eine Exchange-Datenbank durch verschiedene Operationen. Die Folgen sind ähnlich wie im Dateisystem, nämlich eine geringere Leistung durch eine ungünstige Verteilung der Daten auf dem Laufwerk. Das Bordmittel eseutil.exe schafft hier Abhilfe, erfordert aber eine Downtime des Systems.
Anmerkung: Das hier beschriebene Verfahren funkioniert zwar einwandfrei, aber Microsoft rät seit einiger Zeit davon ab. Aus diesem Grund kann es zu Einschränkungen beim Support kommen, wenn nach dem Defragmentieren Probleme auftreten.
Interaktionen mit der Datenbank können zum Beispiel das Anlegen, Löschen oder Verschieben von Benutzern sein, aber auch das normale tägliche Arbeiten mit Postfächern bis hin zur Archivierung. Leere Bereiche werden dann erneut gefüllt, aber dabei verteilen sich neue Daten oft über mehrere Lücken.
Ungenutzten Platz zurückgewinnen
Die Datenbank wird beim Löschen eines Benutzers nicht kleiner, sondern bleibt bei der gleichen Größe stehen. Eine Offline-Defragmentierung kann dagegen Speicherplatz auf dem Laufwerk zurückgewinnen, indem sie diese Lücken schließt. Außerdem wird während dieses Vorgangs nach defekten Bereichen gesucht, um diese zu entfernen.
Die Defragmentierung sollte während einer ausreichend dimensionierten Downtime geplant werden, da die jeweilige Datenbank während dieser Wartungsaufgabe nicht verfügbar ist und die davon betroffenen Benutzer nicht arbeiten können.
Hinweis: Dieses Verfahren sollte man nicht anwenden, wenn die Datenbank Mitglied in einer Availability Group ist.
Platz für temporäre Datei
Zudem sollte man beachten, dass während der Defragmentierung zusätzlicher Speicherplatz für temporäre Dateien bereitgestellt werden muss. Idealerweise bietet das Volume mindestens gleich viel freien Platz wie die Größe der jeweiligen Datenbank.
Ist dies nicht der Fall, dann kann man ein alternatives Laufwerk angeben, das in der Lage ist, die temporäre Datenbank aufzunehmen. Die Temp-Datei wird auf dem Laufwerk angelegt, auf dem die eseutil.exe ausgeführt wird. Außerdem kann man mit dem Parameter /T explizit einen Pfad für die temporäre Datei festlegen.
Datenbank ermitteln
Zuerst muss der Name der Datenbank ermittelt werden, welche defragmentiert werden soll. Dies geht am besten in PowerShell mittels
Get-MailboxDatabase -Status | ft name, databasesize
Neben dem Namen erhält man so die aktuelle Größe des Speicherplatzes, den die Datenbankdatei auf dem Laufwerk belegt.
Der folgende Befehl gibt zusätzlich Auskunft darüber, wie viel Speicherplatz in der Datenbank übrig ist, also die gesamte Größe der Lücken ("Whitespace"):
Get-MailboxDatabase -Status | ft name, databasesize, AvailableNewMailboxSpace
Das Verhältnis zwischen der Größe der Datenbank und des ungenutzten Platzes entscheidet, ob sich eine Defragmentierung lohnt. Enthält zum Beispiel eine 200GB große Datenbank nur 20MB Whitespace, dann wird man von der Optimierung wahrscheinlich absehen.
Defragmentierung starten
Nun nimmt man die Datenbank offline, indem man ihre Bereitstellung aufhebt (Achtung ab jetzt können die User nicht mehr arbeiten). Dazu übergibt man Dismount-Database den Namen der DB, welchen man aus der Ausgabe des obigen Befehls entnimmt:
Dismount-Database -Identity "Mailbox Database 0696279037"
Für die eigentliche Defragmentierung bringt Exchange das Tool eseutil mit, welches sich auf dem Laufwerk unter \program files\microsoft\exchange server\V15\bin befinden sollte.
Folgender Aufruf startet den Vorgang und lagert gleichzeitig die temporäre Datenbank auf ein anderes Volume aus:
eseutil /d "Mailbox Database 0696279037.edb" /T <UNC_path>
Falls der Festplattenplatz auf dem aktuellen Volume ausreicht, dann kann man auf den Parameter /T verzichten:
eseutil /d "Mailbox Database 0696279037.edb"
In meinem Lab bekomme ich bei diesem Aufruf leider einen ERROR 1811 ausgegeben. Vorsichtshalber habe ich deswegen den Dienst Exchange Information Store neu gestartet und mich vergewissert, dass die Datenbank nicht mehr eingehängt ist.
Die Lösung brachte aber dann der absolute Pfad zur Datenbank:
eseutil /d "C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 0696279037\Mailbox Database 0696279037.edb"
In meinem Lab erfolgt die Defragmentierung nun recht schnell, da die Datenbank nicht sehr groß ist. In größeren Umgebungen kann sie schon mal ein paar Stunden dauern.
Datenbank wieder bereitstellen
Der nächste Schritt ist nun, die Datenbank zu mounten, also sie wieder bereitzustellen:
Mount-Database -Identity "Mailbox Database 0696279037"
Zur Kontrolle kann man nun nochmal die Größe der Datenbank mit den Anfangswerten vergleichen.
Wie man sehen kann, habe ich sich sogar in meinem Lab deutlich an Platz hinzugewonnen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Roland Eich ist gelernter Fachinformatiker für Systemintegration und in der IT seit über 14 Jahren zu Hause. Roland deckt aufgrund seiner Erfahrungen ein breites Spektrum der Microsoft-Produktpalette ab.Zudem besitzt er verschiedene Zertifizierungen (MCITP, MCSA und MCSE, ITIL, PRINCE2).
// Kontakt: E-Mail //
Ähnliche Beiträge
- Postfachgröße und Kontingente in Exchange 2016/2019 und Exchange Online konfigurieren
- Postfächer in Exchange gleichmäßig über Datenbanken verteilen
- Exchange-Datenbankfehler untersuchen und beheben
- OWA startet nicht mehr: Microsoft.Exchange. Data.Storage. MailboxOfflineException
- Backup, vMotion: Exchange-Schwellwerte für Datenbankschwenk in DAG anpassen
Weitere Links
1 Kommentar
Huch, schreiben wir jetzt das Jahr 2003 wieder???
Zu damaliger Zeit war eseutil eine Geheimwaffe, um Exchange Datenbanken wieder flott zu kriegen.
Mythen halten sich wohl länger und sind aus den Köpfen nicht herauszubekommen.
Seit 2011 propagiert MS vergeblich: Don't use eseutil for defrag! Mit eseutil defragmented DBS are not longer supported, und dieses Credo gilt bereits seit 2011....!
Die einzige Supported Configuration ist durch Mailbox-Move eine neue DB zu befüllen.
Wenn durch das Löschen von Mailboxen viel Whitespace gewonnen wurde, ist dies eindeutig die prefered Methotik.
Eseutil ist und bleibt ein Emergency Tool um Datenbanken hardcoremäßig im RAWModus zu reparieren, wenn Exchange die DB nicht mehr mounten kann.
[Quelle siehe unten:]
How can I reclaim the whitespace?
Many assume the answer is to perform an offline defragmentation of the database using ESEUTIL. However, *that's not our recommendation*. When you perform an offline defragmentation you create an entirely brand new database and the operations performed to create this new database are not logged in transaction logs. The new database also has a new database signature, which means that you invalidate the database copies associated with this database.
In the event that you do encounter a database that has significant whitespace and you don't expect that normal operations will reclaim it, our recommendation is:
1.) Create a new database and associated database copies.
2.) Move all mailboxes to the new database.
3.) Delete the original database and its associated database copies.
Nehmt bitte diesen Hinweis in obigen Artikel mit auf, Eure Leser korruptieren sonst ihre DBS und bekommen keinen Supoport von MS dafür!
Mehr Lesetoff dazu von MS:
https://blogs.technet.microsoft.com/exchange/2015/05/01/new-support-poli...
https://blogs.technet.microsoft.com/exchange/2011/12/14/database-mainten...