27 marca 2017

Odchudzanie kolejki transportowej na Exchange

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:
  1. 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.
  2. Jeżeli są puste, to zatrzymujemy usługę transportową - stop-service msExchangeTransport.
  3. Przenosimy całą zawartość katalogu Queue (domyślna ścieżka C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue) do lokalizacji tymczasowej.
  4. Uruchamiamy usługę transportową - start-service msExchangeTransport.
  5. 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ż.

Brak komentarzy: