我在MongoDB中创建了一个集合,它有四个索引(一个用于_id,一个用于分片键,另外两个索引用于字段f1和f2上的查询优化),它在8节点群集上分割(每个节点有14GB RAM)。应用程序是写在分片集合中添加新索引后,MongoDB写入性能下降
更新:我使用WiredTiger作为数据库引擎。
问题是,当我删除一个二级索引(从f1或f2),插入速度达到可接受的速度,但是当我添加新索引时,插入性能迅速下降!
我想问题是索引不适合RAM,因为访问模式接近随机,因此HDD速度将是瓶颈。但我期望MongoDB将所有索引加载到RAM中,因为每个节点的总RAM是14GB,'top'命令表示MongoDB在每个节点上使用大约6GB。该指数大小如下:
每个节点:
- 2GB的_id指数
- 1.5GB的shard_key指数
- 3GB的F1指数
- 3GB用于f指数
- 总:所有指数均为9.5GB
正如您所看到的,总指数s IZE约为9.5GB,MongoDB是使用6GB左右,且可用RAM为14GB,因此
- 为什么添加新的索引
- 后的性能下降。如果问题是指数约随机访问,为什么不的MongoDB不加载RAM上的所有索引?
- 我怎样才能确定每个索引的哪一部分被加载到RAM中,哪一部分没有被加载?
问候