Performance mongoimport性能随时间而下降

Performance mongoimport性能随时间而下降,performance,mongodb,mongoimport,Performance,Mongodb,Mongoimport,我正在使用mongoimport将一些json文件导入我的MongoDB数据库。我有5个文件,每个文件大约有200万个文档,集合有4个常规索引和2个多键索引 当我开始导入第一个文件时,我看到每秒插入约500个文档,但一段时间后性能开始下降。我现在正在导入第三个文件,我看到吞吐量低于每秒50个文档。似乎导入会随着集合大小的增加而降低。发生什么事?如何改进这一点?在这种情况下,这可能不是原因,但在写入时,索引确实会有一些开销,因为您既要插入索引,也要插入集合。如果您更新的文档超过了分配的大小,则会对

我正在使用
mongoimport
将一些
json
文件导入我的MongoDB数据库。我有5个文件,每个文件大约有200万个文档,集合有4个常规索引和2个多键索引


当我开始导入第一个文件时,我看到每秒插入约500个文档,但一段时间后性能开始下降。我现在正在导入第三个文件,我看到吞吐量低于每秒50个文档。似乎导入会随着集合大小的增加而降低。发生什么事?如何改进这一点?

在这种情况下,这可能不是原因,但在写入时,索引确实会有一些开销,因为您既要插入索引,也要插入集合。如果您更新的文档超过了分配的大小,则会对性能造成额外的影响。在这些情况下,需要更新包含此文档的所有索引

集合上有6个索引,每个插入的文档都有6个索引需要更新。这将对
mongoimport

您可以通过导入未索引的集合并在事件发生后创建索引来测试这一点


有关索引的写入影响的更多信息,请参见。

Andre,我明白你的观点,但这6个索引存储在btree中也是事实,更新这些索引在计算方面不应该太费钱。更新索引的复杂性取决于它的大小,这很难解释当集合大小翻倍时从每秒500个文档下降到50个文档的原因。。。我尝试在导入后创建索引,创建速度以类似的方式减慢。。。顺便说一下,这很有趣:谢谢!此服务器上有多少可用RAM?大约100G仍然可用,mongoimport当前正在运行,RAM利用率未超过20G。RAM不应该是这里的问题。。集合的totalIndexSize小于3G…导入期间是否运行mongostat?提供其中一些数字(特别是对于res和btree%列)可能很有启发性。我刚刚做了,res=12g。我找不到btree列。