丸の内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
今回講演してくださった楽天の窪田さんのブログに詳しく書いてあります。
カーネルのソースまで見て解析してますwcomputationTimeMicros
取得にかかった時間です。
データが増えると結構時間かかるので頻繁にたたかない方がいいです。overSeconds
一番古いのから新しいデータまでの登録時間の差です。
古いのから消されていくので、使い方が悪い(同じデータばっかり使うとか)場合はこの数字がすごい増えていく。1万とか。
ずっと使っていてこの値が減ってきたらメモリ足りないかも。本家では15分切るとやばいと書いてあったそうです。5分切ると性能的にやばいかも。
この値は正しいので、いまはこの数字を信用するw
その他
ソートしてる時のデータロック時間とかわかるコマンド
ノートPCで1000件をソートしたら10ms秒位かかってました。
db.setProfilingLevel(2)
show collections (system.profileが増えてます)
db.system.profile.find()
- 作者: 桑野章弘
- 発売日: 2012/11/03
- メディア: Kindle版
- 購入: 1人 クリック: 1回
- この商品を含むブログを見る
- 作者: Kristina Chodorow,Michael Dirolf
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2010/09/23
- メディア: ペーパーバック
- クリック: 34回
- この商品を含むブログ (7件) を見る