ドキュメント
MongoDBの基本的なメモリの問題と、メモリ使用量のチェックに関するこの簡単な説明をお読みください。
メモリ使用量の概要
コマンドdb.serverStatus()(docs)は、メモリ使用量の概要、特に以下を提供できます。
> db.serverStatus().mem
{ "bits" : 64, "resident" : 27, "virtual" : 397, "supported" : true }
> db.serverStatus().tcmalloc
... not easy to read! ...
> db.serverStatus().tcmalloc.tcmalloc.formattedString
------------------------------------------------
MALLOC: 3416192 ( 3.3 MiB) Bytes in use by application
MALLOC: + 4788224 ( 4.6 MiB) Bytes in page heap freelist
MALLOC: + 366816 ( 0.3 MiB) Bytes in central cache freelist
...
... a bunch of stats in an easier to read format ...
インデックスの大きさは?
db.stats() すべてのインデックスの合計サイズを表示できますが、次を使用して単一のコレクションの詳細情報を取得することもできます db.myCollection.stats()
たとえば、次のコマンドは、すべてのコレクションのインデックスのサイズを比較します。
> db.getCollectionNames().map(name => ({totalIndexSize: db.getCollection(name).stats().totalIndexSize, name: name})).sort((a, b) => a.totalIndexSize - b.totalIndexSize).forEach(printjson)
...
{ "totalIndexSize" : 696320, "name" : "smallCollection" }
{ "totalIndexSize" : 135536640, "name" : "bigCollection" }
{ "totalIndexSize" : 382681088, "name" : "hugeCollection" }
{ "totalIndexSize" : 511901696, "name" : "massiveCollection" }
これで、その大規模なコレクションの詳細を見て、どのインデックスが最もコストが高いかを確認できます。
> db.massiveCollection.stats().indexSizes
{
"_id_" : 230862848,
"groupId_1_userId_1" : 49971200,
"createTime_1" : 180301824,
"orderId_1" : 278528,
"userId_1" : 50155520
}
これにより、どこで節約が可能かをよりよく知ることができます。
(この場合、createTimeかなり大きなインデックスがあり、ドキュメントごとに1つのエントリがあり、それなしでも生きることができると判断しました。)