解決方案、線上活動| MongoDB Page Fault 的發現與解決、騰訊雲 MongoDB 智能診斷及優化實踐

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

圖片

Page Fault 主要產生問題的是在用戶在讀取,或進行 DML 操作時所需要讀取的數據不再虛擬內存中,而需要等待從磁盤中獲取這些數據。

鑑於以上的原理,Page Fault 的問題產生基於空餘的內存不足的問題,在系統中使用頁面的情況會經常判斷是否有空餘的頁面空間,基於剩餘的空餘頁面的不足,會頻繁驅逐目前已經不在使用的頁面中的數據,並且加載目前需要使用的頁面,基於內存不足的情況,這樣的獲取信息和驅逐頁面的工作會頻繁的進行。

我們可以基於 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 Faults 後的操作。

圖片

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 中並不是一定要把整體的索引都裝載到內存中的數據庫, MongoDB 僅僅需要保證最近經常訪問的最右側的值在內存中即可,對於較大的索引與不充分的內存的情況是有一定的幫助和改善的。

關於作者:劉華陽

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

文章閱讀完了,不要滑走!接下來還有線上活動來襲~
騰訊雲數據庫專家工程師帶您走進騰訊雲 MongoDB 的知識海洋,通過其場景的經典案例爲你分析解答其中的核心原理及處理方法。

MongoDB 中文社區線上直播

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章