MongoDB是否仅限于一个核心?

时间:2012-03-19 16:05:50

标签: mongodb

也许我在某种程度上错误配置了MongoDB,但即使在负载很重的情况下,我也看不到它使用多个核心。例如,top目前正在显示:

Tasks: 145 total,   1 running, 144 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  41182768k total, 40987476k used,   195292k free,   109956k buffers
Swap:  2097144k total,  1740288k used,   356856k free, 28437928k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                         
16297 mongod    15   0  521g  18g  18g S 99.8 47.2   2929:32 mongod                                                                           
    1 root      15   0 10372  256  224 S  0.0  0.0   0:03.39 init      

我能做些什么来让Mongo更有效地使用其他核心吗?如果它是相关的,我目前有一个很大的M / R运行,似乎已经在“等待”模式下放了很多读取查询。

1 个答案:

答案 0 :(得分:31)

MongoDB可以使多核机器上的所有核心饱和以进行读取操作,但是对于写入操作和map-reduce,MongoDB每个mongod进程只能使用一个核心。

单核MapReduce的限制是由于MongoDB使用的Javascript解释器。这是应该在未来修复的东西,但在此期间,您可以使用Hadoop执行MapReduce并将结果集存储在MongoDB数据库中。

另一个看到混合结果的选项是为实例上的每个核心运行单个mongod进程,这不会提高单个数据库的性能,除非它们配置为在分片设置中运行。