29 Stimmen

Ist MongoDB irgendwie auf einen einzigen Kern beschränkt?

Vielleicht habe ich MongoDB irgendwie falsch konfiguriert, aber selbst unter hoher Last sehe ich nicht, dass es mehr als einen Kern verwendet. Zum Beispiel zeigt top derzeit an:

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      

Gibt es etwas, das ich tun kann, damit Mongo die anderen Kerne effektiver nutzt? Wenn es relevant ist, ich habe derzeit eine große M/R laufen, die eine Menge von Leseabfragen in den "Warte"-Modus gesetzt zu haben scheint.

38voto

Brian Knight Punkte 4930

MongoDB kann alle Kerne einer Multi-Core-Maschine für Lesevorgänge sättigen, aber für Schreibvorgänge und Map-Reduce kann MongoDB nur einen einzigen Kern pro MongoDB-Prozess nutzen.

Die Einschränkung für Single-Core MapReduce ist auf den Javascript-Interpreter zurückzuführen, den MongoDB verwendet. Dies soll in Zukunft behoben werden, aber in der Zwischenzeit können Sie Hadoop verwenden, um MapReduce auszuführen und die Ergebnismenge in Ihrer MongoDB-Datenbank zu speichern.

Eine weitere Option, die zu gemischten Ergebnissen geführt hat, ist die Ausführung eines einzelnen Mongod-Prozesses für jeden Kern auf der Instanz. Dies wird die Leistung für eine einzelne Datenbank nicht erhöhen, es sei denn, sie sind so konfiguriert, dass sie in einem Sharded-Setup ausgeführt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X