1

使用11 GB的工作集 ( db.records.totalSize()),我运行touch命令以使 Mongo 在我的 16 GB RAM 盒上使用尽可能多的内存。在运行 touch 之前,该serverStatus命令显示 Mongomem.resident等于5800(大约 6 GB RAM)。

db.runCommand({ touch: "records", data: true, index: true })
    { "ok" : 1 }

但是,在运行 touch 之后,Mongo 使用的内存量大致相同。

    "mem" : {
            "bits" : 64,
            "resident" : 5821, /* only a 21 MB increase */
            "virtual" : 29010,
            "supported" : true,
            "mapped" : 14362,
            "mappedWithJournal" : 28724
    },

为什么该touch命令几乎没有增加 Mongo 使用的 RAM 量(mem.resident)?

4

1 回答 1

1

MongoDB db.serverStatus() 命令报告常驻内存的方式是计算 mongod 进程实际访问了物理 RAM 中的页数。

这意味着当您的集合和索引被读入 RAM 时,它们不会显示在“res”值中,直到您开始实际查询它。

您可以通过查看 mongod 进程有多少 RAM(不是虚拟内存)来验证数据是否已读入 RAM(如果之前肯定是冷的)。

于 2013-10-18T21:58:26.700 回答