2013-09-28 59 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