我多少實際內存心亂如麻正在使用MongoDB的我..mongodb記憶混亂。缺頁和索引的大小
發行db.stats(1024 * 1024),我得到一個輸出
> db.stats(1024*1024)
{
"db" : "test",
"collections" : 9,
"objects" : 38035503,
"avgObjSize" : 535.2138471259339,
"dataSize" : 19414,
"storageSize" : 22280,
"numExtents" : 62,
"indexes" : 12,
"indexSize" : 4039,
"fileSize" : 30642,
"nsSizeMB" : 16,
"ok" : 1
}
所以我有一個小於4000萬的對象和4GB的索引大小。 在具有17GB RAM的Windows服務器上運行該工具,查看資源監視器和任務管理器,我的mongodb實例有一個17GB的工作集和相同數量的可共享。
我的第一個雖然是「好的,所以它已經預先分配數據文件,以便當它實際上需要空間時會有更快的插入」。
但後來我開始mongostat並可以清楚地看到一個非常高的頁面錯誤:
insert query update delete getmore command flushes mapped vsize res faults
time
220 2419 0 0 0 221 0 27.9g 56.1g 16.8g 2659
所以即時猜測,它實際上已經耗盡內存,現在交換,直接從磁盤迴升。
我的問題基本上是我如何才能真正確定數據量,我將能夠在我用完內存之前存儲?統計數據告訴我,它的索引值只有4GB,但mongo似乎被阻塞,交換和消耗全部17GB。我錯過了什麼?
指數大小是無關緊要的。重要的是你的工作集大小。最新版本的MongoDB確實可以計算出您的工作集大小:http://docs.mongodb.org/manual/reference/server-status/#workingset儘管它只能給出一個粗略的估計。基本上你需要考慮的是:a。我所有的查詢都碰到索引,b。我的查詢是否包含在內,如果不是在給定的時間內分配到我的工作集中的文檔數量是多少? – Sammaye 2013-04-25 07:45:46
這些是單個數據庫的統計數據,mongostat顯示您擁有27.9G的數據文件。還有其他數據庫嗎?是複製嗎? – 2013-04-25 07:46:23
@Sammaye你再次失敗了。數據和索引大小都與它有關 - 你認爲還有什麼是佔用RAM的? – 2013-04-25 07:47:10