首頁 > 軟體

MongoDB資料庫效能監控詳解

2023-04-02 06:02:34

一、MongoDB啟動超慢

1、啟動日常卡住,根本不用為了截圖而快速操作,MongoDB啟動真的超級慢~~

2、啟動MongoDB設定伺服器,間歇性失敗。

3、檢視MongoDB紀錄檔,分析“MongoDB啟動慢”的原因。

4、耗時“一小時”,MongoDB啟動成功!

二、原因分析

在MongoDB關閉之前,有較大的索引建立的操作沒有完成,MongoDB就直接shutdown了,等MongoDB再次啟動的時候,MongoDB預設會將這個index重建好,重建期間處於startup狀態。

由於不清楚重建索引需要多久,因此可以通過重啟mongod時加上–noIndexBuildRetry引數來跳過索引重建。等啟動完成後,再建立這個索引。

下面從幾方面,監控一下MongoDB的效能問題。

三、監控MongoDB記憶體使用情況

  • 常駐記憶體: 是MongoDB在RAM中顯式擁有的記憶體。如果查詢一個集合資料,MongoDB會將其放入常駐記憶體中,MongoDB會獲得其地址,這個地址不是RAM中資料的真實地址,而是一個虛擬地址。MongoDB可以將它傳遞給核心,核心會查詢出資料的真實位置。如果核心需要從記憶體中清除快取,MongoDB仍然可以通過該地址對其進行存取。MongoDB會向核心請求記憶體,然後核心會檢視資料快取,如果發現資料不存在,就會產生缺頁錯誤並將資料複製到記憶體中,最後再返給MongoDB。
  • MongoDB的虛擬記憶體: 是作業系統提供的一種抽象,它對軟體程序隱藏了物理儲存的細節。每個程序都可以看到一個連續的記憶體地址空間。在Ops Manager中,MongoDB的虛擬記憶體是對映記憶體的兩倍。
  • MongoDB的對映記憶體: 包含MongoDB曾經存取過的所有資料。

四、監控MongoDB磁碟空間

當磁碟空間不足時,可以進行如下操作:

可以新增一個分片;
刪除未使用的索引;
可以執行壓縮操作;
關閉副本整合員,將其資料複製到更大的磁碟中掛載;
用較大驅動器的成員替換副本集中的成員;

五、MongoDB常用命令

1、MongoDB獲取系統資訊

db.hostInfo()

2、MongoDB獲取系統記憶體情況

db.serverStatus().mem

3、MongoDB獲取連線數資訊

db.serverStatus().connections

4、MongoDB獲取全域性鎖資訊

db.serverStatus().globalLock

5、MongoDB獲取操作統計計數器

db.serverStatus().opcounters

6、MongoDB獲取資料庫狀態資訊

db.stats()

以上是MongoDB的重要指標,通過這些指標我們可以瞭解到MongoDB的執行狀態,評估資料庫的健康程度,並快速確定實際專案中遇到的效能瓶頸。

比如專案中遇到的MongoSocketReadTimeoutException:

六、MongoDB永續性

複製延遲是指從節點無法跟上主節點的速度。

從節點一個操作的時間減去主節點此操作的時間,就是複製延遲。延遲應該儘可能的接近0,並且通常是毫秒級的。

備份操作通常會將所有資料讀入記憶體,因此,備份操作通常應該在副本集從節點而不是主節點進行,如果是單機MongoDB,則應該在空間時間進行備份,比如深夜凌晨。

永續性是資料庫必備的一種特性,想象一下,如果資料庫不具備永續性,如果資料庫重啟,資料全部丟失,太可怕了,不敢想。

為了在伺服器發生故障時提供永續性,MongoDB使用預寫式紀錄檔機制,英文簡稱 WAL。WAL是資料庫系統中一種常見的永續性技術。在資料存入資料庫之前,將這些更改操作寫到磁碟上。

從MongoDB4.0開始,執行寫操作時,MongoDB會使用與oplog相同的格式建立紀錄檔。oplog語句具有冪等性,不管執行多少次,結果都是一樣的。

MongoDB還維護了紀錄檔和資料庫資料檔案的記憶體檢視。預設情況,每50毫秒會將紀錄檔條目重新整理到磁碟上,每60秒會將資料庫檔案重新整理到磁碟上。重新整理資料的時間60秒間隔被稱為檢查點。紀錄檔用於將上一個檢查點之後的資料提供永續性。MongoDB的永續性就是在發生故障時,重啟之後,將紀錄檔中的語句重新執行一遍,以保證在關閉前丟失的資料重新重新整理到MongoDB中。

MongoDB會在data目錄下建立一個journal的子目錄,WiredTiger紀錄檔檔案的名稱為WiredTigerLog.<sequence>。sequence是一個從0 000 000 001開始的數位。

MongoDB會對寫入的紀錄檔進行壓縮,紀錄檔檔案限制的最大大小為100MB。如果大於100MB,MongoDB就會自動建立一個新的紀錄檔檔案,由於紀錄檔檔案只需在上次檢查點之後恢復資料,因此在新的檢查點寫入完成時,舊的紀錄檔檔案就會被刪除。

以上就是MongoDB資料庫效能監控詳解的詳細內容,更多關於MongoDB資料庫效能監控的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com