Od czasu do czasu dostaję pytanie na temat możliwości zmniejszenia pliku kolejki transportowej Exchange, lub po prostu pytanie, dlaczego ten plik jest taki duży? Faktycznie, może się on rozrosnąć do kilkudziesięciu, a nawet ponad 100 GB, jednak bywa to przeważnie łatwe do wytłumaczenia. Plik mail.que, czyli właśnie kolejka transportowa serwera Exchange to baza w formacie Extensible Storage Engine (ESE), podobna do baz skrzynkowych, usługi katalogowej AD, czy też innych usług systemu Windows. Bazy te niestety w odróżnieniu od SQL nie mają mechanizmu "odchudzania" w przypadku zwolnienia wolnej przestrzeni wewnątrz bazy. W bazie tworzone są kolejki dla maili generowanych na bieżąco (jeżeli w organizacji ktoś wysyła duże ilości maili wewnętrznych, to może przekładać się na dużą wielkość pliku), przechowywane są również maile na wypadek awarii i konieczności ich odtworzenia - tzw. Safety Net. Safety Net przechowuje maile już dostarczone do baz danych i po okresie ich przechowywania (domyślnie dwa dni) je kasuje. Jeżeli zwiększymy ten okres, to oczywiście wielkość bazy danych wzrośnie, w zależności od zwiększenia okresu przechowywania i ilości przetwarzanych maili. Można to bardzo prosto zweryfikować komendą:
Get-TransportConfig | select SafetyNetHoldTime
Domyślnie system zwróci wartość "2.00:00:00", czyli dwa dni. Żeby zmniejszyć okres przechowywania maili w kolejce wystarczy wykonać komendę:
Set-TransportConfig -SafetyNetHoldTime 2.00:00:00
Oczywiście możemy użyć innej, wygodnej dla nas wartości.
Jeżeli serwer należy do DAG, to dodatkowo domyślnie włączona jest funkcja Shadow Redundancy, dla której również są zdefiniowane okresy przechowywania maili w replikach kolejek. Parametry związane z Shadow Redundancy również możemy zmienić, korzystając z tego samego polecenia Set-TransportConfig.
Co można zatem zrobić, jeżeli boimy się, że kolejka przepełni nam dysk? Zasadniczo opcje są dwie - przeniesienie kolejki transportowej na dysk z większą ilością wolnego miejsca, albo wymuszenie odtworzenia pustej bazy. W tym drugim wypadku procedura jest bardzo prosta:
- Sprawdzamy, czy kolejki na serwerze są puste - w tym celu najprościej zawiesić usługę transprtową komendą suspend-service msExchangeTransport, a następnie sprawdzić ilość maili w kolejkach komendą get-queue.
- Jeżeli są puste, to zatrzymujemy usługę transportową - stop-service msExchangeTransport.
- Przenosimy całą zawartość katalogu Queue (domyślna ścieżka C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue) do lokalizacji tymczasowej.
- Uruchamiamy usługę transportową - start-service msExchangeTransport.
- Po uruchomieniu usługi i utworzeniu pustych plików możemy stare pliki skasować z tymczasowej lokalizacji.
Oczywiście opcja druga usunie Safety Net i Shadow Queues również.