MongoDB Page Fault 的發現與解決、騰訊雲 MongoDB 智慧診斷及優化實踐

MongoDB中文社群發表於2022-06-21

Page Fault 在大多數資料庫中都會存在,頁面錯誤的定義是當 MongoDB 讀取資料時,發現資料不再常駐的 Cache 中,而需要等待從磁碟讀取資料到記憶體中的頁面,這些頁面就被稱之為 Page Faul。



Page F ault 主要產生問題的是在使用者在讀取,或進行 DML 操作時所需要讀取的資料不再虛擬記憶體中,而需要等待從磁碟中獲取這些資料。


鑑於以上的原理, Page F ault 的問題產生基於空餘的記憶體不足的問題,在系統中使用頁面的情況會經常判斷是否有空餘的頁面空間,基於剩餘的空餘頁面的不足,會頻繁驅逐目前已經不在使用的頁面中的資料,並且載入目前需要使用的頁面,基於記憶體不足的情況,這樣的獲取資訊和驅逐頁面的工作會頻繁的進行。


我們可以基於 db.serverStatus() 來進行相關的資訊的分析工作。

    var info = db.serverStatus()info.wiredTiger.cache['pages read into cache']info.wiredTiger.cache['unmodified pages evicted']

    通過動態比較上面的兩個系統的監控值,為當前的記憶體不足所引起的問題。如果讀取的 page read into cache 與 unmodified pages evicted 頁面之間存在正比的關係,就很有可能是因為記憶體不足,或查詢中經常有一些大型的獲取資料的查詢並且可能沒有走索引導致。


    同時我們還可以通過檢視當前系統的記憶體是否充足,如 FREE 剩餘記憶體多少,是否已經使用 WAP 方式。同時開啟慢查詢分析,檢視是否當前有一些走了全表掃描的語句正在批量執行。



    這裡畫一個問題分析的邏輯結構圖如何解決在發現  Page F aults 後的操作。



    db.serverStatus().extra_info.page_faults ,也可以通過 extra_info 命令來獲取系統內告知的 page_faults 的數量。



    除此以外,我們還可以通過一些其他的手段來判斷你當前的記憶體是否夠目前的執行使用。


    • 可以將當前的經常使用的 collection 進行統計。

    • 通過 db.collection.totalIndexSize() 來收集當前熱度很高的索引的大小有多少,如果這些索引已經超過了當前的 wiredtiger cache size 就需要注意當前的記憶體擴容的問題了。


    另外根據官方文件中的文字介紹: Ensure Indexes Fit in RAM — MongoDB Manual


    Indexes do not have to fit entirely into RAM in all cases. If the value of the indexed field increments with every insert, and most queries select recently added documents; then MongoDB only needs to keep the parts of the index that hold the most recent or "right-most" values in RAM. This allows for efficient index use for read and write operations and minimize the amount of RAM required to support the index.


    實際上在 MongoDB 中並不是一定要把整體的索引都裝載到記憶體中的資料庫,  M on goDB 僅僅需要保證最近經常訪問的最右側的值在記憶體中即可,對於較大的索引與不充分的記憶體的情況是有一定的幫助和改善的。


    關於作者:劉華陽


    MongoDB 中文社群成員 ,資料庫愛好者18年,MongoDB 狂熱粉絲,曾經任國產某資料庫產品經理,目前某網際網路餐飲公司資料庫部門負責人,PostGreSQL ACE、Austindatabases 公眾號寫手,熟悉  PostGreSQL、MySQL、MongoDB、SQL Server 等資料庫。


    文章閱讀完了,不要滑走!接下來還有線上活動來襲~

    騰訊雲資料庫專家工程師帶您走進騰訊雲 MongoDB 的知識海洋,通過其場景的經典案例為你分析解答其中的核心原理及處理方法。



    MongoDB 中文社群線上直播   



    在本期直播中, 將帶您瞭解如何處理 在騰訊雲 MongoDB 的坑點、注意事項、核心實現原理、常見問題、智慧診斷及優化實踐。從而 助力網際網路行業的發展,並分享相關案例作為參考。

    主題:
    騰訊雲 MongoDB 智慧診斷及優化實踐

    分享嘉賓:
    楊亞洲 | 騰訊雲資料庫專家工程師

    時間:
    6月15日(星期三)19:00


    掃描下方二維碼預約直播!


    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69961190/viewspace-2901822/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章