MongoDB學習筆記(9)–最佳化器 profile

來源:互聯網
上載者:User
在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  記錄。  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.