日誌 Log
MongoDB有4種日誌,分别是系統日誌、Journal日誌、oplog主從日誌、慢查詢日誌等。這些日誌紀錄著MongoDB數據庫不同方面的蹤跡。下面分别介紹這幾種日誌。
系統日誌
系統日誌在MongoDB數據庫中很重要,它紀錄著MongoDB啟動和停止的操作,以及服務器在運行過程中發生的任何異常消息。 配置系統日誌的方法很簡單,啟動mongod時指定logpath參數即可。
mongod -logpath=/data/log/mongodb/serverlog.log -logappend
Journal日志
journal日誌功能則是 MongoDB 裡面非常重要的一個功能,它保證了數據庫服務器在意外斷電、自然災害等情況下數據的完整性。它通過預寫式的redo日誌為MongoDB增加了額外的可靠性保障。開啟該功能時, MongoDB會在進行寫入時建立一條Journal日誌,其中包含了此次寫入操作具體更改的磁盤地址和字節。因此一旦服務器停止運作,可在啟動時對日誌進行重放,從而重新執行那些停機前沒能夠刷新到磁盤的寫入操作。 MongoDB配置WiredTiger引擎使用内存緩衝區來保存journal紀錄,WiredTiger根據以下間隔或條件將緩衝的日誌紀錄同步到磁盤。
- 從MongoDB 3.2版本開始每隔50ms將緩衝的journal數據同步到磁盤
- 如果寫入操作設置了j:true,則WiredTiger強制同步日誌文件
- 由於MongoDB使用的journal文件大小限制為100MB,因此,WiredTiger大約每100MB數據創建一個新的日誌文件。當WiredTiger創建新的journal文件時,WiredTiger會同步以前journal文件
oplog主從日誌
MongoDB 的 Replica Set 架構是通過一個日誌來存儲寫操作,這個日誌叫做”oplog”。oplog.rs 是一個固定長度的 capped collection,它存在於”local”數據庫中,用於紀錄 ReplicaSets 操作日誌。在默認下, 對於 64 位的 MongoDB, oplog 是比較大的,可以達到5%的磁盤空間。oplog的大小可以通過 mongod 的參數”—oplogSize”來改變 oplog 的日誌大小。
Profiler 慢查詢日誌
有兩種方式可以控制 Profiling 的開關和級別,第一種是直接在啟動參數裡直接進行設置。 啟動MongoDB加上-profile 即可。也可以在客戶端調用 db.setProfilingLevel(級別) 命令實時設置,0-不開啟,1-記錄慢命令(默認100ms),2-記錄所有命令。
mongo –profile=級別
db.setProfilingLevel(2);
另外可以通過 db.getProfilingLevel()命令獲取當前的Profile級別,Profiler資訊保存在 system.profile中。設置滿查詢的方式有兩種
mongo –profile=級別 -slowms=毫秒
db.setProfilingLevel(2, 毫秒);
MongoDB的Profile紀錄是直接存在系统 db 裡的,紀錄位置 system.profile,所以,我们只要查詢這個 Collection的紀錄就可以獲取到我們的 Profile 紀錄。例如:列出執行時間長於某一限度(5ms)的 Profile 紀錄,
db.system.profile.find( { millis : { $gt : 5 } } )
查詢最後一條profile
db.system.profile.find().sort({$natural:-1}).limit(1)