[英]Can I create index after loading documents in sharded mongodb collection?
[英]MongoDB write performance drops after adding new index on a sharded collection
我在MongoDB中创建了一个集合,该集合具有四个索引(一个用于_id,一个用于分片的键,以及两个其他索引用于字段f1和f2的查询优化),并且在8节点集群(每个节点具有14GB RAM)上进行分片)。 应用程序写
更新:我使用WiredTiger作为数据库引擎。
问题是,当我从f1或f2中删除一个二级索引时,插入速度达到了可接受的速度,但是当我重新添加新索引时,插入性能会迅速下降!
我想问题是索引不适合RAM,并且由于访问模式几乎是随机的,因此HDD速度将成为瓶颈。 但是我希望MongoDB将所有索引加载到RAM中,因为每个节点的总RAM是14GB,并且“ top”命令说MongoDB在每个节点上使用大约6GB。 索引大小如下:
每个节点:
如您所见,总索引大小约为9.5GB,MongoDB使用的内存约为6GB,可用RAM为14GB,因此
最好的祝福
为什么添加新索引后性能下降
预计索引会降低写入性能,因为每个索引都会增加完成写入所需的工作量。 性能会降低多少? 您能否量化它的降级程度以及可以接受的性能变化? 您能给我们看一个示例文档并指定您要创建的索引吗? 一些索引的维护成本比其他索引高得多。
如果问题是随机访问索引,为什么MongoDB不会在RAM上加载所有索引?
它将加载正在使用的内容。 您怎么知道它没有将索引加载到RAM中? 尽管有额外的RAM,您是否仍然看到很多页面错误? 您的WiredTiger缓存大小设置为什么?
如何确定每个索引的哪一部分加载到RAM中以及哪一部分没有加载到RAM?
我认为没有简单的方法可以做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.