Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are my mongodb indexes so large

Tags:

mongodb

I have 57M documents in my mongodb collection, which is 19G of data. My indexes are taking up 10G. Does this sound normal or could I be doing something very wrong! My primary key is 2G.

{
        "ns" : "myDatabase.logs",
        "count" : 56795183,
        "size" : 19995518140,
        "avgObjSize" : 352.0636272974065,
        "storageSize" : 21217578928,
        "numExtents" : 39,
        "nindexes" : 4,
        "lastExtentSize" : 2146426864,
        "paddingFactor" : 1,
        "flags" : 1,
        "totalIndexSize" : 10753999088,
        "indexSizes" : {
            "_id_" : 2330814080,
            "type_1_playerId_1" : 2999537296,
            "type_1_time_-1" : 2344582464,
            "type_1_tableId_1" : 3079065248
        },
        "ok" : 1
    }
like image 330
jdh Avatar asked May 16 '12 11:05

jdh


People also ask

Are MongoDB indexes compressed?

Compression. With WiredTiger, MongoDB supports compression for all collections and indexes. Compression minimizes storage use at the expense of additional CPU. By default, WiredTiger uses block compression with the snappy compression library for all collections and prefix compression for all indexes.

What happens if an index does not fit into RAM?

Indexes do not have to fit entirely into RAM in all cases. If the value of the indexed field increments with every insert, and most queries select recently added documents; then MongoDB only needs to keep the parts of the index that hold the most recent or "right-most" values in RAM.

Are MongoDB indexes stored in memory?

Short answer: Indicies have an in-memory and storage presence. Update are frequently written to storage(~100ms or less).


1 Answers

The index size is determined by the number of documents being indexed, as well as the size of the key (compound keys store more information and will be larger). In this case, the _id index divided by the number of documents is 40 bytes, which seems relatively reasonable.

If you run db.collection.getIndexes(), you can find the index version. If {v : 0}, the index was created prior to mongo 2.0, in which case you should upgrade to {v:1}. This process is documented here: http://www.mongodb.org/display/DOCS/Index+Versions

like image 161
Jenna Avatar answered Sep 21 '22 01:09

Jenna