4

我对 mongostat 中的故障指标有疑问。我在 ubuntu 上运行 mongo 2.0,在 raid-0 配置中有 2 个磁盘(每个 32G)。

将 500 万个用户配置文件加载到 mongo 中的测试。我在单线程中执行该过程并使用 insert (bulk of 1000 entries) 。

当我第一次设置 mongo并将配置文件加载到其中时,我在加载过程中看到 mongostat(2,5,甚至 15)中有许多故障。

然后我再次运行加载:首先我删除旧集合,然后运行加载。以下时间几乎所有时间故障=0 。

这是为什么?

4

1 回答 1

5

MongoDB 通过内存映射文件机制将内存管理传递给操作系统。基本上,这种机制允许程序打开比已安装 RAM 大得多的文件。当程序尝试访问该文件的一部分时,操作系统会查看该部分(页面)是否在 RAM 中。如果不是,则发生页面错误,并且该页面是从磁盘加载的。faults/smongostat 中的指标正好显示了这一点:每秒发生了多少页错误。

现在,当您启动 mongo 并将数据加载到其中时,数据文件不会映射到内存中,它们必须从磁盘加载(页面错误)。当你删除一个集合时,它在逻辑上会被删除,但对应的物理文件不会被删除,会被重复使用。由于它们已经在 RAM 中,因此没有页面错误。

如果您改为删除数据库,它会带走文件,因此您下次应该会看到页面错误。

于 2012-06-16T19:47:02.163 回答