MongoDB是否仅限于一个核心?

Nic*_*ell 25 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      
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ght 34

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

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

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

  • 现在呢 ?任何改进或答案都会变旧? (4认同)
  • 截至2014年5月30日(使用mongo 2.6.1),我仍然看到只使用了一个CPU核心. (3认同)
  • 我仍然认为是这种情况-http://stackoverflow.com/questions/4407336/mongodb-utilizing-multi-cpu-server-for-a-write-heavy-application (2认同)
  • Mongo 3.4.2 仍然在单核(100% cpu)上运行..不过我不确定 3.5 。 (2认同)