丸の内MongoDB勉強会 #9 in 楽天

2013/4/17に行われたMongoDB勉強会に参加してきました。

内容としてはいろいろあったのですが、そのうちWorking Set Analyzerについて書きます。

Working Set Analyzerとは

2.4で追加された新機能
メモリ上で保持しているデータ量なんかを見ることができます
データすべてチェックしてるからコストが高い処理なので、頻繁に使うのは避けた方がいいそうです。

使い方

現在のステータスを確認するコマンドとして

db.serverStatus()

がありますが、デフォルトでは表示されないので

db.serverStatus({workingSet:1})

とします。
するといろんな値がどばーっと出てきて見づらいので、対象の値だけを見たいなら

db.serverStatus({workingSet:1}).workingSet

と打ちます。すると

{
    "note" : "thisIsAnEstimate",
    "pagesInMemory" : 114700,
    "computationTimeMicros" : 33046,
    "overSeconds" : 1189
}

と表示されます。
ちなみにWindowsだと

> db.serverStatus({workingSet:1}).workingSet
{ "info" : "not supported" }

と表示されて、どうやらサポートされてないっぽいです。orz (参考)
Windowsはメモリの値とかとるのが大変だからじゃないかという話も。。。。

説明

  • note
    あくまで見積もりの値であって正確ではないですよと

  • pagesInMemory
    一番メインとなる値で、メモリのサイズを表しています
    ただ、PCに実装されているサイズよりも大きい値が出てきたりして、ぶっちゃけバグってますw
    今回講演してくださった楽天の窪田さんのブログに詳しく書いてあります。
    カーネルのソースまで見て解析してますw

  • computationTimeMicros
    取得にかかった時間です。
    データが増えると結構時間かかるので頻繁にたたかない方がいいです。

  • overSeconds
    一番古いのから新しいデータまでの登録時間の差です。
    古いのから消されていくので、使い方が悪い(同じデータばっかり使うとか)場合はこの数字がすごい増えていく。1万とか。
    ずっと使っていてこの値が減ってきたらメモリ足りないかも。本家では15分切るとやばいと書いてあったそうです。5分切ると性能的にやばいかも。
    この値は正しいので、いまはこの数字を信用するw

その他

ソートしてる時のデータロック時間とかわかるコマンド
ノートPCで1000件をソートしたら10ms秒位かかってました。

db.setProfilingLevel(2)
show collections (system.profileが増えてます)
db.system.profile.find()

MongoDBのはじめての運用テキスト

MongoDBのはじめての運用テキスト

MongoDB: The Definitive Guide

MongoDB: The Definitive Guide