也许我在某种程度上错误配置了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运行,似乎已经在“等待”模式下放了很多读取查询。
答案 0 :(得分:31)
MongoDB可以使多核机器上的所有核心饱和以进行读取操作,但是对于写入操作和map-reduce,MongoDB每个mongod进程只能使用一个核心。
单核MapReduce的限制是由于MongoDB使用的Javascript解释器。这是应该在未来修复的东西,但在此期间,您可以使用Hadoop执行MapReduce并将结果集存储在MongoDB数据库中。
另一个看到混合结果的选项是为实例上的每个核心运行单个mongod进程,这不会提高单个数据库的性能,除非它们配置为在分片设置中运行。