Mongodb

如何獲取 MongoDB 的目前工作集大小

  • September 5, 2016

文件中,它說

“為了獲得最佳性能,您的大部分活動集應該適合 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

評論中由 quanta 連結的SO 問題/答案是正確的,“工作集”基本上是您的系統將處於活動狀態/正在使用的數據量和索引。

db.stats()除非您認為您需要在 RAM 中擁有整個數據集和整個索引,否則您無法判斷這將是什麼。也就是說,您可以計算出該數據庫的最大工作集,但不能計算出實際的活動工作集。最大值是以下各項之和:

  1. dataSize - 此數據庫中保存的數據的總大小
  2. indexSize - 在此數據庫上創建的所有索引的總大小

在您的情況下,考慮到您粘貼的輸出,該最大值約為 30.45 MiB。

為了跟踪實際記憶體使用情況,我建議將免費監控工具 - MMSdb.stats()中可用的數據和記憶體圖(特別是常駐記憶體)結合起來。

更新(2013 年 4 月 8 日):

2.4 版向serverStatus 命令添加了工作集大小估計器- 它只是一個估計值,但它可以用作指導並檢查上面的其他數字和估計值是否對您的 MongoDB 實例有意義。

更新(2016 年 9 月):

從我最初的答案開始三年後,事情變得更加複雜 - 通常獲取數據的大小和索引仍然是一個很好的起點。但是,在 MongoDB 中解決問題現在取決於您使用的儲存引擎。此外,作為集合級別鎖定工作的一部分,版本 3.0 刪除了上面為 MMAP 連結的工作集估計器(請參閱SERVER-13783)。假設您已經跳轉到新引擎,現在(例如)引擎的記憶體統計資訊可以作為替代。WiredTiger對於MMAP,一般建議是查看頁面錯誤指標作為您的數據是否適合記憶體的代理。

引用自:https://serverfault.com/questions/425834