1TB Limit

Früher war bei 16,17,18,50 Gigabyte ein Datenbank-Limit heute sind Postfächer schon größer. Das nächste Limit ist nun bei 1TB zu finden

Sinnvolle Datenbankgröße

Wenn immer mehr Exchange Postfächer in die Cloud gehen, dann kommen Firmen auch mit immer weniger lokalen Servern aus. Mit genug RAM und erschwinglichen SSDs geht der Trend auch zu größeren Datenbanken. Auch wenn Server immer schneller werden, Datenraten zugenommen haben und SSDs erschwinglich sind, sollten Sie die Größe einer Exchange Datenbank doch im Auge behalten. Für eine einfache nicht replizierte Datenbank gibt es die Empfehlung, dass eine Datenbank maximal 200 GB werden sollte. Sie müssen diese Datenbank ja zeitnah auch wieder restaurieren und bereitstellen können.

Wenn Sie die Datenbank in einer DAG replizieren, dann ist der Verlust einer Datenbank nicht sofort kritisch. Insofern können Sie sich etwas mehr Zeit für ein Restore oder Recovery lassen, da die Dienste auf einem anderen Server ja weiter laufen. Je mehr Kopien Sie haben, desto weniger kritisch ist die zeit. Aber auch hier sollten Sie den Blick auf die Datenbank haben. eine 1TB-Datenbank ist schon groß und ein Reseeding von einem anderen Server kann einige Zeit eine hohe Last auf die Quelle, das Ziel und das Transfermedium legen. Wer drei oder mehr Server in der DAG hat, kann die Kopie von einer anderen Kopie ziehen und damit die aktive Datenbank entlasten. Aber die Server selbst sind sicher auch mit anderen Datenbanken beschäftigt. Da kann selbst eine 10 GBit-Verbindung oder der Storage-Kanal zum Engpass werden.

Das dürfte auch der Grund sein, warum Microsoft bei 1 TB erst einmal sowohl ein Lizenz auch ein Betriebslimit eingebaut hat. Ein Standard Server kann nicht mehr als 1TB Datenbanken verwalten und selbst ein Enterprise Server schaltet eine 1TB Datenbank erst einmal offline und wartet auf die Reaktion des Administrators!

Tipp: Überwachen Sie die Größe ihrer Exchange Datenbanken aktiv und es kann Umgebungen geben, wo selbst 1 TB viel zu groß ist und Sie schon viel früher die "Notbremse" ziehen sollten.

Die Notbremse können Sie dabei über zwei Wege angehen:

  • Über RegKey "Database Size Limit in GB"
    Der wird nicht nur gebraucht, um die 1TB Grenze auf dem Enterprise Server zu lockern, sondern kann auch genutzt werden, um z.B. das Limit niedriger zu setzen
  • Disk Quotas
    Sie können mit der Quota-Funktion von Windows auch Verzeichnisse im Wachstum begrenzen. Exchange merkt schon, wenn der Platz knapp wird und beendet die Datenbank frühzeitig. So können Sie vermeiden, dass gleich die ganze Festplatte und schlimmstenfalls das Betriebssystem nicht mehr atmen kann

Wenn Sie aber beide Wege bislang nicht genutzt haben, dann passiert es eben, dass die Festplatte voll gelaufen ist oder ihre Datenbank auf 1TB angewachsen ist.

Datenbank Dismount

Und dann kann das folgende Fehlerbild erscheinen:

Oder natürlich auch in  der PowerShell:

Failed to mount database "MB1". Error: An Active Manager operation failed. Error: The database action failed. Error:
Database 'MB1' on server 'ex2019' cannot be mounted due to a previous error:
      At '12.11.2022 09:31:09' database copy 'MB1' on this server exceeded the configured maximum database size and
service recovery was not attempted. Please increase the value of this registry key on the server hosting the active
database copy before attempting to mount this database.
      For more details about the failure, consult the Event log on the server for other storage and "MSExchangeIS"
events.

 If you have addressed the underlying problem, or if you have decided to attempt to mount the database despite this
error, the mount operation may be attempted by using the '-Force' parameter of the Mount-Database cmdlet. [Database:
MB1, Server: ex2019.msxfaq.net]

Auch im Eventlog hinterlässt sich natürlich dieser Fehler:

Log Name:      Application
Source:        MSExchangeIS
Date:          12.11.2022 09:45:20
Event ID:      40011
Task Category: (6)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      EX2019.msxfaq.net
Description:
       Exchange store MB1: The logical size of this database (the logical size equals 
the physical size of the .edb file minus the logical free space) is 1062 GB. This database 
size has exceeded the size limit of 1024 GB,
       configured in registry key Database Size Limit in Gb at SYSTEM\CurrentControlSet\
Services\MSExchangeIS\EX2019\Private-<guid>. 

This database will be dismounted immediately.

Lösung

Wenn Sie nun denken, dass Sie einfach ein "Mount-Database  MB1 -force" machen müssen, dann haben Sie sich geirrt. Zwei Dinge müssen Sie tun:

  • Exchange Enterprise Server
    Der Exchange Standard Server kann nicht mehr als 5 Datenbanken bis max. 1TB/Datenbank mounten.
    Der Exchange Enterprise Server kann bis zu 100 Datenbanken bis max. 16TB/Datenbank mounten.
    Also brauchen Sie zwingend Exchange Enterprise wenn auch nur eine Datenbank >1TB ist.
  • RegistryKey "Database Size Limit in GB"
    Dieser Schlüssel ist auf jedem Server und für jede Datenbank auf den von ihnen gewählten Wert zu setzen.

Microsoft hat dieses Limit wohl eingebaut, damit eine Datenbank nicht komplett aus dem Ruder läuft und ungeahnte und von den meisten Firmen nicht mehr handhabbare Grenzen überscheitet. Die reine Dateigröße ist dabei sicher nicht das Problem, denn NTFS unterstützt bist zu 16TB Partitionen mit 4k Blockgröße. Exchange Volumes sollten aber mit 64k Blocksize formatiert werden, so dass schon 256TB als einzelne Partition möglich sind Da passt die maximale Dateigröße von 16 Exabyte lange noch nicht drauf.

Übrigens: Früher was das Limit bei 16GB bis zu 50GB. Siehe Exchange NOTFALL - 16,17,18,50 Gigabyte Limit
Das sind Größen, die heute schon einzelne Postfächer haben.

Leider hat Microsoft das Limit nicht bei vielleicht 800 GB gesetzt, so dass Sie eine derart heruntergefahrene Datenbank mit einem etwas höheren Limit auch noch mit einem Standard Server betreiben und Postfächer umlagern können. Wenn Sie auf einem Standard Server die 1TB für eine Datenbank erreichen, dann bleibt nur die Installation eines Enterprise Keys, denn auch mit Tricks können Sie die Datenbank sonst nicht mehr mounten.

The database maximum size is hard-coded as 1,024 GB in the event, even though you may have changed it to a higher value in the registry.
Quelle: Exchange Server 2013, 2016 and 2019 Standard Edition can't mount databases that are larger than 1024 GB
https://learn.microsoft.com/en-us/exchange/troubleshoot/administration/exchange-cannot-mount-database-larger-than-1024-gb

Umgekehrt bedeutet dies, dass ein Exchange Standard Server maximal 5 Datenbanken mit bis zu 1TB betreiben kann, d.h. 5 TB Gesamtvolumen und sie sollten besser nicht so knapp auf Kante nähen. Microsoft empfiehlt weiterhin 200GB für alleinstehende Datenbanken und max. 2TB für replizierte Datenbanken:

Skript zum Einstellen

Die maximale Größe der Datenbank können Sie über die Registrierung einstellen. Dies ist pro Server und pro Datenbank pro Server erforderlich. Wenn Sie also z.B. ein Limit bei 800GB aktivieren wollen, dann können Sie folgende Zeilen auf jedem Server einmal ausführen:

#Set-DatabaseMaxSize

[cmdletbinding()]
param(
   $NewDBMaxSize = 800    #maximum Database Size in GB
)

Write-Verbose "Set-DatabaseMaxSize:Start"

Write-Verbose "Get local Servername"
[string]$servername = $env:computername
Write-Verbose "Servername: $($servername)"

Write-Verbose "Loading DatabaseGUIDs" for this Server"
$DatabaseGUIDList = Get-ExchangeServer -Server $localserver | Get-MailboxDatabase | Select-Object GUID

Write-Verbose "Loading DatabaseGUIDs" for this Server"
foreach ($DatabaseGUID in $DatabaseGUIDList) {
   Write-Verbose "Processing Database $($DatabaseGUID)"
   $DatabaseRegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\MSExchangeIS\" + $env:computername + "\Private-" + $DBGUID.Guid
   Write-Verbose "Update Registy"
   $null = New-ItemProperty `
      -Path $DatabaseRegPath `
      -Name "Database Size Limit in GB" `
      -Value $NewDBMaxSize `
      -PropertyType DWORD `
      -Force 
}
Write-Verbose "Set-DatabaseMaxSize:End"

Das ersetzt natürlich nicht ein Monitoring ihrer Datenbanken, der Protokolldateien und dem freien Festplattenplatz. Wer keine Monitoring-Lösung hat, kann auch mit den Windows Quotas z.B. pro Datenbank im Verzeichnis eine Grenze definieren, so dass ein Alarm generiert wird.

Weitere Links