我对mongostat中的故障指标有疑问。 我在ubuntu上运行mongo 2.0,在raid-0配置中运行2个磁盘(每个32G)。
测试加载到mongo 500万用户配置文件。 我正在单线程中执行该过程并使用insert(大量的1000个条目)。
当我为第一次设置mongo并加载到配置文件时,我在加载过程中看到mongostat(2,5,甚至15)中的许多错误。
然后我再次运行加载:首先我放弃旧的集合,然后运行加载。 以下几次 fault = 0 几乎所有时间。
为什么?
答案 0 :(得分:5)
MongoDB通过内存映射文件机制将内存管理中继到操作系统。基本上,这种机制允许程序打开比安装的RAM大得多的文件。当程序试图访问该文件的一部分时,OS会查看该部分(页面)是否在RAM中。如果不是,则发生page fault并从磁盘加载该页面。 mongostat中的faults/s
指标正好显示了这一点:每秒发生多少页面错误。
现在,当您启动mongo并将数据加载到其中时,数据文件不会映射到内存中,而是必须从磁盘加载(页面错误)。删除集合时,它会在逻辑上被删除,但相应的物理文件不会被删除并将被重用。由于它们已经在RAM中,因此没有页面错误。
如果你删除了一个数据库,它会带有文件,所以下次你应该看到页面错误。