Mongodb profile(慢查詢日志)


在MySQL中,慢查詢日志是經常作為我們優化數據庫的依據,那在MongoDB中是否有類似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。所以MongoDB 不僅有,而且還有一些比MySQL的Slow Query Log更詳細的信息。

 

開啟 Profiling  功能 

有兩種方式可以控制 Profiling  的開關和級別,第一種是直接在啟動參數里直接進行設置。 啟動MongoDB時加上–profile=級別  即可。 
也可以在客戶端調用 db.setProfilingLevel(級別)  命令來實時配置,Profiler  信息保存在 system.profile 中。我們可以通過db.getProfilingLevel()命令來獲取當前的Profile級別,類似如下操作 

 db.setProfilingLevel(2);    

上面profile的級別可以取0,1,2  三個值,他們表示的意義如下: 

0 –  不開啟 

1 –  記錄慢命令 (默認為>100ms)  

2 –  記錄所有命令  

 

Profile  記錄在級別 1 時會記錄慢命令,那么這個慢的定義是什么?上面我們說到其默認為100ms,當然有默認就有設置,其設置方法和級別一樣有兩種,一種是通過添加–slowms 啟動參數配置。第二種是調用db.setProfilingLevel時加上第二個參數: 

db.setProfilingLevel( 1 , 10 ); 

 

查詢 Profiling  記錄 

 

與 MySQL 的慢查詢日志不同,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) 

 { "ts" : ISODate("2012-05-20T16:50:36.321Z"), "info" : "query test.system.profile reslen:1219 

nscanned:8  \nquery: { query: {}, orderby: { $natural: -1.0 } }  nreturned:8 bytes:1203", "millis" : 
0 } 

 

字段說明 

ts:  該命令在何時執行 
info:  本命令的詳細信息 
reslen:  返回結果集的大小 
nscanned:  本次查詢掃描的記錄數 
nreturned:  本次查詢實際返回的結果集 
millis:  該命令執行耗時,以毫秒記  

 

MongoDB Shell  還提供了一個比較簡潔的命令 show profile,可列出最近5 條執行時間超過

1ms的 Profile  記錄。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM