MongoDBの現在のワーキングセットサイズを取得する方法


9

ドキュメントから、それは言った

「最高のパフォーマンスを得るには、アクティブセットの大部分がRAMに収まる必要があります。」

だから例えば、私db.stats()にくれ

{
"db" : "mydb",
"collections" : 16,
"objects" : 21452,
"avgObjSize" : 768.0516501957859,
"dataSize" : 16476244,
"storageSize" : 25385984,
"numExtents" : 43,
"indexes" : 70,
"indexSize" : 15450112,
"fileSize" : 469762048,
"ok" : 1
}

どの値working set sizeですか?


回答:


9

SOの質問/答えのコメントで量子によってリンクが正確である、「ワーキングセット」は基本的にお使いのシステムで使用中/アクティブになり、データとインデックスの量です。

db.stats()データセット全体とインデックス全体をRAMに置く必要があると思わない限り、それが何であるかはわかりません。つまり、そのデータベースの最大ワーキングセットは計算できますが、実際のアクティブワーキングセットは計算できません。最大は次の合計です。

  1. dataSize-このデータベースに保持されているデータの合計サイズ
  2. indexSize-このデータベースで作成されたすべてのインデックスの合計サイズ

あなたの場合、貼り付けた出力を考えると、その最大値は約30.45 MiBです。

実際のメモリ使用量を追跡するには、からの数値db.stats()とメモリグラフ(特に常駐メモリ)を無料の監視ツール-MMSで利用できるようにすることをお勧めします。

アップデート(2013年4月8日):

バージョン2.4 は、serverStatusコマンドにワーキングセットサイズ見積もりを追加しました。これは単なる見積もりですが、ガイドとして使用したり、上記の他の数値や見積もりがMongoDBインスタンスにとって意味があるかどうかを確認したりできます。

アップデート(2016年9月):

私の元の回答から3年後、状況はかなり複雑になりました。一般に、データとインデックスのサイズを取得することは、出発点としてはまだ十分です。しかし、MongoDBで物事を理解することは、現在使用しているストレージエンジンに依存します。さらに、バージョン3.0では、コレクションレベルのロック作業の一環として、上記でリンクされたMMAPのワーキングセットエスティメータが削除されました(SERVER-13783を参照)。(たとえば)今そこにあるキャッシュ統計のためのWiredTiger代替では、新しいエンジンへのジャンプをしたと仮定してエンジンが。以下のためにMMAP、一般的な推奨事項は、見ているページフォルト、データをメモリにフィットしているか否かのプロキシとしてメトリック。


実はもう使っMMSていますが、どの図を見ればいいのかわかりません。
ハワード

一般に、メモリグラフ上の常駐図がここで最も関連しています。データセットがRAMよりも大幅に大きい場合、時間の経過とともに増加し、使用可能なすべてのRAMを占有します(新しいデータをページインするために必要に応じて古いデータがページアウトされます)。そうでない場合、データセットはかなり静的であり、より低いレベルを見つけてそこにホバーします。上記で概説した最大値は、個々のデータベースがその数値の一部として使用するRAMの最大値です。
Adam C

1
MongoDB 3.0以降、serverStatusコマンドにワーキングセットサイズの見積もりが含まれなくなりました。docs.mongodb.com/manual/reference/command/serverStatus
Vince Bowdren

1
物事は3〜4年で大きく変わりました。私はオリジナルを残して、新しいバージョンのオプションのいくつかをカバーするために更新を追加しました。
Adam C
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.