Nastąpiło spore zamieszanie w kwestii odzyskiwania przestrzeni w MongoDB, a niektóre zalecane praktyki są wręcz niebezpieczne w przypadku niektórych typów wdrożeń. Więcej szczegółów poniżej:
TL; DR repairDatabase
próbuje odzyskać dane z autonomicznych wdrożeń MongoDB, które próbują odzyskać dane po uszkodzeniu dysku. Jeśli odzyska miejsce, jest to efekt uboczny . Odzyskiwanie miejsca nigdy nie powinno być głównym celem podczas biegania repairDatabase
.
Odzyskaj miejsce w samodzielnym węźle
WiredTiger: W przypadku samodzielnego węzła z WiredTiger uruchomienie compact
spowoduje zwolnienie miejsca w systemie operacyjnym z jednym zastrzeżeniem: compact
na polecenie w WiredTiger w MongoDB 3.0.x wystąpił ten błąd: SERVER-21833, który został naprawiony w MongoDB 3.2.3. Przed tą wersjącompact
na WiredTiger mógł po cichu zawieść.
MMAPv1: Ze względu na sposób działania MMAPv1 nie ma bezpiecznej i obsługiwanej metody odzyskiwania miejsca przy użyciu silnika pamięci MMAPv1. compact
w MMAPv1 zdefragmentuje pliki danych, potencjalnie udostępniając więcej miejsca na nowe dokumenty, ale nie zwalnia miejsca z powrotem do systemu operacyjnego.
Państwo może być w stanie uruchomić repairDatabase
, jeśli w pełni zrozumieć konsekwencje tego potencjalnie niebezpiecznego polecenia (patrz poniżej), ponieważrepairDatabase
w istocie przepisuje całą bazę odrzucając uszkodzone dokumenty. Efektem ubocznym jest utworzenie nowych plików danych MMAPv1 bez jakiejkolwiek fragmentacji i zwolnienie miejsca z powrotem do systemu operacyjnego.
Aby uzyskać mniej ryzykowną metodę, uruchom mongodump
i mongorestore
może być również możliwe we wdrożeniu MMAPv1, w zależności od rozmiaru wdrożenia.
Zwolnij miejsce w zestawie replik
W przypadku konfiguracji zestawu replik najlepszą i najbezpieczniejszą metodą odzyskania miejsca jest wykonanie początkowej synchronizacji , zarówno dla WiredTiger, jak i MMAPv1.
Jeśli chcesz odzyskać miejsce ze wszystkich węzłów w zestawie, możesz przeprowadzić kroczącą synchronizację początkową. Oznacza to, że wykonaj początkową synchronizację na każdym z elementów pomocniczych, zanim ostatecznie zejdziesz z podstawowego i wykonaj na nim początkową synchronizację. Metoda wstępnej synchronizacji kroczącej jest najbezpieczniejszą metodą wykonywania konserwacji zestawu replik, a dodatkowo nie wiąże się z żadnymi przestojami.
Należy pamiętać, że możliwość wykonania stopniowej wstępnej synchronizacji zależy również od rozmiaru wdrożenia. W przypadku bardzo dużych wdrożeń wykonanie początkowej synchronizacji może nie być możliwe, a zatem opcje są nieco bardziej ograniczone. Jeśli jest używany WiredTiger, to może być w stanie podjąć jedną wtórną Spośród zestawu, należy go uruchomić jako samodzielny, prowadzonym compact
na nim, i dołączyć go do zestawu.
Jeżeli chodzi o repairDatabase
Nie uruchamiaj repairDatabase
na węzłach zestawu replik . Jest to bardzo niebezpieczne, o czym wspomniano na stronie naprawy bazy danych i opisano bardziej szczegółowo poniżej.
Nazwa repairDatabase
jest nieco myląca, ponieważ polecenie nie próbuje niczego naprawiać. Polecenie było przeznaczone do użycia w przypadku uszkodzenia dysku w samodzielnym węźle , co może prowadzić do uszkodzenia dokumentów.
repairDatabase
Komenda może być bardziej dokładnie opisane jako „bazy” salvage. Oznacza to, że odtwarza bazy danych, odrzucając uszkodzone dokumenty w celu wprowadzenia bazy danych do stanu, w którym można ją uruchomić i odzyskać z niej nienaruszony dokument.
We wdrożeniach MMAPv1 ta przebudowa plików bazy danych zwalnia miejsce w systemie operacyjnym jako efekt uboczny . Zwolnienie miejsca dla systemu operacyjnego nigdy nie było celem.
Konsekwencje repairDatabase
na zestawie replik
W zestawie replik MongoDB oczekuje, że wszystkie węzły w zestawie będą zawierać identyczne dane. Jeśli uruchomisz repairDatabase
na węźle z zestawem replik, istnieje szansa, że węzeł zawiera niewykryte uszkodzenie i repairDatabase
sumiennie usunie uszkodzone dokumenty za Ciebie.
Jak można się było spodziewać, ten węzeł zawiera inny zestaw danych niż reszta zestawu. Jeśli aktualizacja dotrze do tego pojedynczego dokumentu, cały zestaw może się zawiesić.
Co gorsza, jest całkowicie możliwe, że sytuacja ta może pozostać uśpiona przez długi czas, by zaatakować nagle bez wyraźnego powodu.