我试图在 mongodb 后台创建两个复合索引。根据 mongo 文档和其他来源,后台索引创建不应影响读/写。
但观察到严重的性能问题。页面错误从 4/s 跃升至 180/s,需要 300 毫秒才能完成的查询开始需要超过 2 秒。
数据库大小:40GB
文档:4000 万个
先前索引大小:24GB
复合索引 1:{field1:1,field2:-1}
复合索引 2:{field3:1,field4:-1}
数据库统计:{“db”:“响应”,“集合”:4,“对象”:42253780,“avgObjSize”:1008.5294166817738,“数据大小”:42614180096,“存储大小”:43648786160,“numExtents”:44 ,“索引“:14,“indexSize”:22113921536,“fileSize”:79352037376,“nsSizeMB”:16,“extentFreeList”:{“num”:53,“totalSize”:5861306368},“dataFileVersion”:{“主要”:4 ,“次要”:22},“好的”:1}
free -m :
已使用的空闲共享缓冲区缓存总数 Mem: 64314 63944 370 1 867 56077 -/+ 缓冲区/缓存: 7000 57314 Swap: 3999 434 3565
小智 5
索引构建会影响数据库的性能。虽然后台索引构建不会阻止读取或写入,但“索引创建不应影响读/写的[性能]”的说法是不正确的。
构建索引需要通过内存对整个集合进行分页;这是出现页面错误的原因。您可能只想一次只构建一个索引,以减少此过程的影响。