我在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中,哪一部分沒有被加載?
問候