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 compactspowoduje zwolnienie miejsca w systemie operacyjnym z jednym zastrzeżeniem: compactna 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. compactw 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 mongodumpi mongorestoremoż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 compactna nim, i dołączyć go do zestawu.
Jeżeli chodzi o repairDatabase
Nie uruchamiaj repairDatabasena 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 repairDatabasejest 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.
repairDatabaseKomenda 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 repairDatabasena zestawie replik
W zestawie replik MongoDB oczekuje, że wszystkie węzły w zestawie będą zawierać identyczne dane. Jeśli uruchomisz repairDatabasena węźle z zestawem replik, istnieje szansa, że węzeł zawiera niewykryte uszkodzenie i repairDatabasesumiennie 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.