mmap-MongoDB如何使用内存
MongoDB tells 操作系统去map all data files 到内存,操作系统使用mmap()system call来完成。从这一点看,data file,包括所有的 docments,collections,和它们的indexes,都swapped in and out of RAM通过操作系统使用4KB chunks called pages。当data from a given page is requested,就是被查询了,操作系统必须确保 the page is available in RAM。如果不满足,这就是一个exception known as a page fault is raised,这时候 memory manager 就去 disk load data to RAM。如果有足够的内存,所有的 data file in use 最终都会被加载到内存中。
当内存发生了改变,比如一个写操作,产生的变化将会被 flushed to disk asynchronously by the OS,但写操作仍是很快的,直接操作内存。当数据量可以适应内存大小,可以达到一个理想状况——对磁盘的操作达到最小量。但是如果数据量超出内存,page faults 将会悄悄上来,那么OS就会频繁访问内存,读写操作要慢很多。最糟糕的状况是——数据量远大于内存大小,读写不稳定,性能急剧下降。
MongoDB中read block writer,较长时间的磁盘访问会降低并行和吞吐量。
页:
[1]