2016-06-10 116 views
7

當我使用以下命令創建爲什麼一個空的MongoDB數據庫如此之大?

mongod --dbpath db 

其中db是我在我從中調用命令的目錄中創建的文件夾一個新的MongoDB數據庫實例。運行這個程序並檢查目錄的大小後,我發現它的大小超過了300MB - 當那裏沒有數據時。

這是怎麼回事嗎?

感謝您的幫助!


編輯

由於人們在談論journal預分配的大小。

這是在數據庫目錄,通過排序文件/文件夾的列表(有現在數據庫中的數據的一點點,但是它的大小是可忽略這裏):

$du -ha | sort -n 
4.0K ./WiredTiger 
4.0K ./WiredTiger.lock 
4.0K ./WiredTiger.turtle 
4.0K ./WiredTigerLAS.wt 
4.0K ./mongod.lock 
4.0K ./storage.bson 
8.0K ./.DS_Store 
8.0K ./diagnostic.data/metrics.2016-06-10T11-07-50Z-00000 
8.0K ./diagnostic.data/metrics.interim 
16K ./_mdb_catalog.wt 
16K ./index-3-3697658674625742251.wt 
36K ./collection-0-3697658674625742251.wt 
36K ./index-1-3697658674625742251.wt 
36K ./sizeStorer.wt 
44K ./WiredTiger.wt 
60K ./collection-2-3697658674625742251.wt 
72K ./diagnostic.data/metrics.2016-06-10T10-19-31Z-00000 
100M ./journal/WiredTigerLog.0000000003 
100M ./journal/WiredTigerPreplog.0000000001 
100M ./journal/WiredTigerPreplog.0000000002 
168K ./diagnostic.data/metrics.2016-06-10T11-17-58Z-00000 
256K ./diagnostic.data 
300M ./journal 
301M . 

由於你可以看到,期刊目錄佔據了幾乎所有的空間。

+1

這不是http://stackoverflow.com/questions/9598971的副本,如'mongod'未開始' - 在這個例子中「-replSet」。一個目錄列表可以確認,但是當啓動一個新的MongoDB 3.2時,預期分配的文件大約300MB是['journal'](https://docs.mongodb.com/manual/core/journaling/)目錄中預期分配的文件的預期大小服務器使用WiredTiger存儲引擎。日誌文件大小限制爲100MB,我希望啓動時有三個文件。 – Stennie

+0

我已經添加了大小的文件到我的問題 - 我認爲這證實了你的假設。謝謝! – dafyddPrys

+0

感謝您添加目錄列表(fwiw,'du -ha'會顯示更友好的文件大小)。這實際上是WiredTiger(默認存儲引擎與MongoDB 3.2一樣)的預期日誌文件預分配。 – Stennie

回答

7

根據您的MongoDB版本和配置的存儲引擎,將在啓動時預分配多個數據和元數據文件。這是預期的行爲:「空白」部署仍會導致管理和診斷數據。

根據您的目錄列表,您正在運行默認使用WiredTiger存儲引擎的MongoDB 3.2。 WiredTiger分配了每個日誌文件到100MB,因此新的部署〜預分配journal files的300MB:

 100M ./journal/WiredTigerLog.0000000003 
    100M ./journal/WiredTigerPreplog.0000000001 
    100M ./journal/WiredTigerPreplog.0000000002 
從日誌文件

除此之外,其他元數據將在您的dbpath創建(無需做明確創建數據庫尚)包括:

  • 一個local數據庫封頂集合稱爲startup_log有關的mongod這種情況下每次啓動調用一些診斷信息。將有一個local.startup_log的關聯收集和索引文件;文件名是不透明的,但作爲第一個文件創建的,我在你的榜樣猜測這些可能是:

    36K ./collection-0-3697658674625742251.wt 
    36K ./index-1-3697658674625742251.wt 
    
  • 多WiredTiger元數據文件。總是會有在部署至少一個數據庫,因爲local數據庫默認情況下爲startup_log創建:

    4.0K ./WiredTiger 
    4.0K ./WiredTiger.lock 
    4.0K ./WiredTiger.turtle 
    4.0K ./WiredTigerLAS.wt 
    16K ./_mdb_catalog.wt 
    36K ./sizeStorer.wt 
    44K ./WiredTiger.wt 
    
  • 一個diagnostic.data目錄;這是服務器狀態的指標定期取樣:

    168K ./diagnostic.data/metrics.2016-06-10T11-17-58Z-00000 
    72K ./diagnostic.data/metrics.2016-06-10T10-19-31Z-00000 
    
1

當你創建一個新的數據庫時,MongoDB爲oplog創建空間。

oplog(操作日誌)是一個特殊的上限集合,用於保存修改存儲在數據庫中的數據的所有操作的滾動記錄。

+0

感謝您使用簡單的指針:) – dafyddPrys

+0

oplog特定於複製,因此不會爲此獨立服務器('mongod --dbpath ...')的示例創建。還有其他數據文件可能會預先分配,具體取決於MongoDB版本和存儲引擎;目錄列表將提供更多的見解。 – Stennie