MongoDB: Database Profiler

來源:互聯網
上載者:User

文章來源:http://www.mongodb.org/display/DOCS/Database+Profiler

 

剛接觸mongodb的時候,曾經用過profile,但是沒有這麼詳細的閱讀這篇文檔,可能是自己的系統的訪問規模還不夠大吧,如果訪問量大的時候必然會讓我們查看一些效能方面的問題,這個時候我們就要考慮一下mongodb profile了,下面開始詳細的分析: 什麼是Database Profiler。

它是mongodb提供的一個用來分析mongodb效能的,比如有哪些操作的執行時間超過了期望的閥值,我們就可以在enable profiler的情況下從system.profile查看到你想要的一些資訊。

  mongodb不同版本的支援情況。

v1.9之前的版本只能夠在primary上節點使用,v1.9+將會在secondaries也得到支援

  profiling支援哪幾個level?

目前有三個level: 0, 1, 2

 

[c-sharp] view plaincopy 0 - off   1 - log slow operations (by default, >100ms is considered slow)   2 - log all operations    

  如果enable profiling和 check profiling狀態?

預設情況是profiling是disable的,你可以通過下面的命令列enable:

 

[c-sharp] view plaincopy > db.setProfilingLevel(1,20) // log slow operations, slow threshold=20ms   > db.getProfilingStatus() // new shell helper method as of v1.7+   { "was" : 1, "slowms" : 20 }    

 

setProfilingLevel就是用來設定profiling層級的,0代表關閉; 1代表監控哪些慢的操作,至於慢的標準可以通過第二個參數來設定,比如我認為超過了20ms的操作就是慢的操作了;2則會記錄所有的操作。

 

getProfilingStatus則是用來查看prifiling的,was代表設定的層級;slowms則表示一個時間閥值。

 

當然你也可以在啟動mongodb的時候,通過下面兩個參數來設定:

 

[c-sharp] view plaincopy $ mongo --profile=1 --slowms=15    

  profiling資訊儲存在哪裡。如何查看。

profiling是針對資料庫設定是否enable的,Profiling data會記錄在資料庫的system.profile這個collection裡面,我們可以使用find來查看裡面的內容,所以find使用一些查詢限定符可以協助我們查看我們關注的record。

 

所以find的限定符能夠給我們帶來很大的協助,讓我們快速的定位到指定位置。

  system.profile裡面的每條記錄都代表什麼意思呢。

ts: 這條記錄的產生時間;

millis: 操作的執行多少ms,這個時間不包括擷取鎖和網路傳輸消耗的時間,僅僅是mongodb進程處理它的時間;

info: 對操作的詳細描述了:

 

1) query

query開頭,表示這條記錄是條查詢語句,它後面會跟著四個參數資訊,ntoreturn表示用戶端的查詢請求要返回的object個數,比如findOne操作,這裡則會顯示1,limit操作則顯示limit的個數,0則表示沒有限制,有多少返回多少了;query表示具體的查詢時時使用的限定符,如{$gte: {x : 2}};nscanned表示為了找到符合查詢條件的documents, mongodb查看了多少個documents;reslen表示查詢返回的結果有多少bytes;nreturned表示這次查詢操作返回多少個documents。

 

2) update

update開頭,表示這條記錄是更新或者插入語句,後面會跟著五個參數資訊,fastmode表示該操作不需要等待執行完畢就可以返回了;fastmodinsert表示該操作是insert操作,而且無需等待執行完畢就可以返回,可以認為是非同步;upsert說明我們調用update時候設定了upsert為true,它表示如果尋找不到指定條件的記錄就插入這條記錄,否則更新尋找到記錄;moved表示更新object的時候需要移動磁碟空間位置,update本來是in-place update的,但是因為object變大了,原來的空間大小已經放不下了,所以不得不搬家,這種會降低更新速度;key updates表示這次更新影響了多少個index上的更改。

 

3) insert

insert開頭,表示這條記錄是插入語句

 

4) getmore

 

getmore開頭,表示用戶端是接著上面的find來擷取更多的documents,一般一個find只會先返回一部分document給用戶端,後面的document藉助cursor的next方法向mongodb發送請求,這個時候我們就能在system profile中看到getmore記錄了。

  開啟profile有什麼影響沒。

開啟的時候會對mongodb速度有一定影響,儘管不會很嚴重,Profile data是儲存在collection system profile中的,而這個collection是capped collection, 所以預設的情況下這個collection不是很大,所以這裡面通常儲存的最近的一些操作的記錄。

  如何最佳化查詢效能呢。

1) 當nscanned的大小遠遠大於nreturned的時候,說明資料庫在從大量的documents中尋找我們想要的documents,這個時間要對查詢的條件建索引了。

 

2) 當reslen的值很大的時候,表示mongodb返回了大量的資料給client, 比如1M,這個時候我們時候可以給find第二個參數,讓查詢操作只返回我們關心的那些fields,而不是盲目的全部返回給client。

  如何最佳化更新效能呢。

1)同上1

 

2) 使用fast modify

  

上面的內容全部來自mongodb自己的offical文檔,有興趣自己可以讀讀英文文檔並親自動手操作一下mongodb 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.