MongoDB takes long for indexing

By : bayer
Source: Stackoverflow.com
Question!

I have the following setup:

  • Mac Pro with 2 GB of RAM (yes, not that much)
  • MongoDB 1.1.3 64-bit
  • 8 million entries in a single collection
  • index for one field (integer) wanted

Calling .ensureIndex(...) takes more than an hour, actually I killed the process after that. My impression is, that it takes far too long. Also, I terminated the process but the index can be seen with .getIndexes() afterwards.

Anybody knows what is going wrong here?

By : bayer


Answers

I would just like to point out the command:

db.currentOp()

which prints the current operations running on the server, and also shows the indexing process.

The foreground indexing is done in 3 steps, and the background one in 2 steps (if I remember correctly), but the background one is alot slower. The foreground one on the other hand locks the collection while indexing it (ie not very useful on a running application server).

As said before, google BTree if you are interested in how they work.

Anybody knows what is going wrong here?

Are you running via ssh or connecting remotely in some way? Sound a bit like a broken pipe issue. Did you create the index with {background : true} or not?



Adding an index on an existing data set is expected to take a while, as the entire BTree needs to be constructed. If you think this is taking an unreasonable amount of time, or you've seen a regression in performance the best bet is to ask about it on the list.

By : mdirolf


This video can help you solving your question :)
By: admin