连接上的MongoDB RAM消耗



我正在使用pymongoMongoDB gridFS插入大量json,并收集一些数据。前段时间我注意到,MongoDB在使用单个连接时消耗了大量的RAM。一旦我关闭此连接,它就会释放它。连接时的RAM消耗总量约为10-12GB,不连接时的内存消耗总量约200MB。集合的实际大小实际上约为300MB,具有10-18GB的gridFS存储空间。

为什么会发生这种情况?如何为任何庞大的操作打开新的连接都比为所有操作使用一个连接对资源的依赖性小得多?它在某种程度上与记者有关吗?

为了便于理解,我必须将这个问题分解为多个较小的问题:

  1. 众所周知,MongoDB非常需要RAM,它会尽可能多地使用RAM
  2. GridFS倾向于将文件存储在集合fs.chunks中,并将相应的元数据存储在fs.files中。存储在GridFS中的文件被分割成每个256KB的块

当您通过打开连接读取GridFS数据时,属于文件的块必须从磁盘加载到RAM中(如果RAM中还没有)。因此,RAM的使用与存储的数据量成正比,重要的是GridFS数据访问的频率只是为了重新迭代GridFS数据,如果查询引用它,它就会被拉入RAM。

如果您有大量GridFS数据的活动连接,那么您应该预计会大量使用RAM。但是,如果您的查询频率较低(只写,但很少读),那么RAM的使用率将相对较低。如果您主要是在写数据,请确保在操作完成后关闭连接。

  1. 打开的连接数量越多,您的RAM使用率就会增加
  2. 这与日记没有任何关系

注意:GridFS还支持分片,这将解决您过度使用RAM的问题。

希望这能澄清。

由于MongoDB 2.0。每个连接消耗大约1MB的RAM。

你可以在这里阅读更多。

最新更新