2013-09-28 92 views
0

今天我一直在與MongoDB一起進行性能測試。一旦我設法使用硬盤的所有剩餘空間,測試就停在了中間位置。所以我刪除了一些文件,並在db.dropDatabase();之後重新開始測試。但我注意到db.collection.stats();的結果現在似乎是錯誤的。如何重置MongoDB的收集統計信息?

我的問題是,我如何使MongoDB重置/重新計算集合的統計信息?

+0

你的意思是'db.collection.stats()'?統計數據是錯誤的? – JohnnyHK

+0

老實說,我不確定它是否是錯誤的,但我的測試數據庫有100M文件(每個文件都有兩個字段,一個'int'和一個'date'類型)和''storageSize'一樣大:8683839472'其索引是「totalIndexSize」:5769288112'。如果我可以通過重置統計數據來確保統計數據,那將會很好。 – Mehran

+0

文檔中沒有任何內容暗示它並不總是最新的,所以這些值是正確的。 – JohnnyHK

回答

0

像mongodb這樣的聲音爲數據保留空間,並且在您再次運行測試時「知道」您需要的索引,即使此時沒有數據。

你刪除了哪些文件?如果你真的不需要這些數據,你可以停止mongod,並刪除與數據庫相對應的其他文件 - 但這僅僅是在測試環境中運行並且不共享你的數據庫纔是安全的。

+0

我刪除的文件不是mongo的一部分。我從mongo中釋放的唯一空間是我使用'dropDatabase'。 – Mehran

+0

好 - 刪除數據庫文件是有風險的,除非您知道您在測試系統上並且可以承受丟失數據。如果是這種情況,可以刪除mongodb的數據文件(存儲在我安裝的/ data中) - 不要刪除mongo安裝,除非您喜歡重新安裝軟件。如果你正在測試,使用虛擬機是很有用的,所以你可以每次都從乾淨的狀態開始;如果mongo爲下次運行節省空間,它會扭曲你的結果。 – kmorris

+0

請不要給人們建議刪除文件,除非刪除整個/ data/db目錄。 db.dropDatabase()是擺脫數據庫而不冒任何風險的完美適當方式。 –

0

我認爲你正在尋找db.collectionName.drop()函數,然後使用mongoimport --db dbName --collection collectionName --file fileName重新導入你的集合來查看這些值是否正確,但很快就猜測它們是正確的。

+0

db.dropDatabase()將刪除當前數據庫中的所有集合,請參閱http://docs.mongodb.org/manual/reference/method/db.dropDatabase/#db.dropDatabase – kmorris

+0

起初我嘗試過'db.collectionName .drop()',但是失敗時會出現一個錯誤,提示'存儲滿時不能寫鎖'或類似的東西。即使我釋放了10%的存儲空間後,我仍然不斷收到此錯誤。所以我決定使用'db.dropDatabase()'。 – Mehran