2013-12-12 9 views
10

Mam bazę danych o nazwie log_test1, z tylko 1 dziennikami kolekcji ograniczone. Maksymalny rozmiar kolekcji z limitem wynosi 512M. Po wprowadzeniu 200k danych okazało się, że użycie dysku dla bazy danych wynosi 1,6G. Z db.stats() widzę, że storageSize ma wielkość 512M, jest poprawna, ale moja rzeczywista wielkość pliku to 1,6G, dlaczego tak się stało? Jak mogę kontrolować rozmiar dysku to tylko mój rozmiar kolekcji z ograniczoną wielkością i rozmiar indeksu?dlaczego moja wielkość pliku mongodb jest znacznie większa niż rozmiar pamięci w db.stats()?

> use log_test1 
switched to db log_test1 
> db.stats() 
{ 
    "db" : "log_test1", 
    "collections" : 3, 
    "objects" : 200018, 
    "avgObjSize" : 615.8577328040476, 
    "dataSize" : 123182632, 
    "storageSize" : 512008192, 
    "numExtents" : 3, 
    "indexes" : 8, 
    "indexSize" : 71907920, 
    "fileSize" : 1610612736, 
    "nsSizeMB" : 16, 
    "dataFileVersion" : { 
     "major" : 4, 
     "minor" : 5 
    }, 
    "ok" : 1 
} 

Odpowiedz

10

Jest tak prawdopodobnie dlatego, że MongoDB wstępnie przydziela dane i pliki dziennika.


MongoDB 2

W katalogu danych, MongoDB preallocates pliki danych do określonego rozmiaru, częściowo zapobiec fragmentacja. MongoDB wymienia pierwszy plik danych: <databasename>.0, następny <databasename>.1, itp. Pierwszy plik przydziela mongod to 64 megabajty, następne 128 megabajtów, i tak dalej, do 2 gigabajtów, w którym to momencie wszystkie kolejne pliki mają 2 gigabajty. Pliki danych zawierają pliki z przydzielonym obszarem, ale nie przechowują żadnych danych. mongod może przydzielić 1 gigabajtowy plik danych, który może być w 90% pusty. W przypadku większości większych baz danych niewykorzystane miejsce jest niewielkie w porównaniu z bazą danych.

W systemach uniksowych, mongod preallocates dodatkowy plik danych i inicjuje miejsca na dysku 0. plików danych Preallocating w tle pozwala na znaczne opóźnienia, gdy nowy plik bazy danych jest obok przydzielone.

Możesz wyłączyć alokację wstępną za pomocą opcji czasu pracy noprealloc. Jednak noprealloc jest nie przeznaczona do użytku w środowiskach produkcyjnych: do testowania używa się tylko noprealloc i małych zestawów danych, w których często upuszczasz bazy danych.

MongoDB 3

Pliki danych w katalogu danych, który jest katalogiem w konfiguracjach domyślnych /data/db może być większy niż zestaw danych wprowadzony do bazy danych. Rozważmy następujące możliwe przyczyny:

pliki danych zdefiniowanej przez

MongoDB preallocates swoje pliki danych w celu uniknięcia fragmentacji systemu plików, i z tego powodu, rozmiar tych plików nie muszą odzwierciedlać wielkość danych.

Opcja powoduje zmniejszenie rozmiaru tych plików , co może być przydatne, jeśli na dysku znajduje się wiele małych baz danych.

oplog

Jeśli mongod jest członkiem zestawu replik, dane katalog zawiera plik oplog.rs, która jest ograniczona zdefiniowanej przez zbiór w lokalnej bazie danych.

Przydział domyślny to około 5% miejsca na dysku w 64-bitowych instalacjach .

Czasopismo

Katalog danych zawiera pliki dziennika, które przechowują operacji zapisu na dysku przed MongoDB stosuje je do bazy danych.

Puste rekordy

MongoDB utrzymuje listy pustych rekordów w bazach danych gdyż usuwa dokumentów i zbiorów. MongoDB może ponownie użyć tej przestrzeni, , ale domyślnie nie zwróci tej przestrzeni do systemu operacyjnego.


Zrobione z MongoDB Storage FAQ.

Powiązane problemy