[英]What is mongodb behavior regarding keeping loaded indexes in ram?
假設我在mongodb中只有一個索引,並且只有一個索引,並且我需要使用該mongo集合的應用程序整個生命周期的索引。 我想知道mongodb的行為。 在這種情況下,一旦索引加載到內存中,mongodb會將其保留在ram中嗎?
謝謝
不幸的是,您當前無法將集合或索引固定在內存中。 MongoDB使用內存映射文件將集合和索引加載到內存中。 當您的活動通過查詢,更新,插入和刪除觸及數據庫的各個部分時,該數據將被加載到內存中。 這稱為工作集。 如果加載工作集所需的總內存少於可用內存,則沒有問題。
如果沒有,MongoDB將使用LRU算法來選擇要從內存中卸載的內容。 這就是為什么理解工作集的概念以及它與可用內存的關系如此重要的原因。
文檔中的這篇文章應該會有所幫助:
如何計算應用程序需要多少RAM?
您需要的RAM數量取決於幾個因素,包括但不限於:
- 數據庫存儲與工作集之間的關系。
- LRU(最近最少使用)的操作系統緩存策略
- 日記的影響
- 頁面錯誤的數量或速率以及其他MMS量規,以檢測何時需要更多RAM
每個數據庫連接線程最多需要1 MB的RAM。 從磁盤將數據加載到內存時,MongoDB遵從操作系統。 它只是簡單地映射所有數據文件的內存,並依靠操作系統來緩存數據。 當內存不足時,操作系統通常會從RAM中清除最近最少使用的數據。 例如,如果客戶端訪問索引的頻率比文檔訪問頻率高,那么索引很可能會保留在RAM中,但這取決於您的特定用法。
要計算所需的RAM數量,必須計算工作集大小或客戶端最常使用的數據部分。 這取決於您的訪問模式,擁有的索引以及文檔的大小。 由於MongoDB每個連接模型使用一個線程,因此每個數據庫連接也將需要多達1MB的RAM,無論是活動的還是空閑的。
如果很少出現頁面錯誤,則您的工作集適合RAM。 如果故障率上升到更高水平,則可能會降低性能。 與旋轉磁盤相比,SSD驅動器的重要性不那么重要。
http://docs.mongodb.org/manual/faq/diagnostics/
您可以使用serverStatus命令來獲取當前工作集的估計值:
db.runCommand( { serverStatus: 1, workingSet: 1 } )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.