2015-01-14 15 views
0

假設我在MongoDB中只有一個索引,並且我需要使用該mongo集合的應用程序的整個生命週期的索引。 我想知道有關MongoDB的行爲。 在這種情況下,索引加載到內存中後,mongodb會將它保存在內存中嗎?關於在ram中保持加載索引的mongodb行爲是什麼?

由於

+1

http://docs.mongodb.org/manual/tutorial/ensure-indexes -fit-RAM / – Disposer

回答

0

的MongoDB將敲除的RAM將是LRU(least recently used)數據片的第一件事情。所以,如果你只有一個索引,它很可能會繼續使用,而且應該保持在記憶中。

Source

0

可惜你不能針目前的集合或索引在內存中。 MongoDB使用內存映射文件將集合和索引加載到內存中。由於您的活動通過查詢,更新,插入和刪除來觸及數據庫的各個部分,因此該數據將被加載到內存中。這被稱爲工作集。如果加載工作集所需的總內存少於可用內存,則沒有問題。

如果不是,MongoDB將使用LRU算法來選擇從內存中卸載什麼。這就是爲什麼瞭解工作集的概念以及它與可用內存的關係如此重要。

這從文檔的書面記錄應該是有幫助的:

如何計算我多少RAM需要爲我的應用程序?

的RAM,你需要的量取決於幾個因素,其中包括但 不限於:

  • 數據庫存儲和工作組之間的關係。
  • 爲LRU操作系統的緩存策略(最近最少使用)
  • ,當你需要更多的內存

每個日誌

  • 數或頁面錯誤等MMS計率的影響,以檢測數據庫連接線程將需要高達1 MB的RAM。 MongoDB 將數據從 磁盤加載到內存時遵循操作系統。它只是內存映射其所有數據文件,並依靠操作系統來緩存數據。當內存不足時,操作系統通常會從RAM中清除最近最少使用的數據。對於 示例如果客戶機比文檔更頻繁地訪問索引,那麼 索引將更可能留在RAM中,但這取決於您的特定用法。

    要計算您需要多少內存,您必須計算您的工作集大小或您客戶最常使用的部分數據。 這取決於您的訪問模式,您擁有的索引以及文檔的大小。由於MongoDB使用每個連接 模型的線程,每個數據庫連接也需要高達1MB的RAM,無論是活動還是空閒,都需要 。

    如果頁面錯誤不頻繁,那麼您的工作集適合內存。如果故障率升高,則可能會導致性能下降。對於SSD驅動器而言,這是 比旋轉磁盤更不重要。

  • http://docs.mongodb.org/manual/faq/diagnostics/

    可以使用serverStatus命令來獲取您當前的工作集的估計:

    db.runCommand({ serverStatus: 1, workingSet: 1 }) 
    
    相關問題