mongodb profiling慢請求監控日誌

kunlunzhiying發表於2018-08-30

0:關閉,不收集任何資料。

1:收集慢查詢資料,預設是100毫秒。

2:收集所有資料

檢視Profiling和設定

db.getProfilingStatus()  

設定日誌收集級別和時間

db.setProfilingLevel(1,3000)

db.system.profiling.find().sort({$natural:-1}).limit(30)

以上要操作要是在test集合下面的話,只對該集合裡的操作有效,要是需要對整個例項有效,則需要在所有的集合下設定或則在開啟的時候開啟引數:

關閉Profiling

db.setProfilingLevel(0)

引數含義

drug:PRIMARY> db.system.profile.find().pretty()

{

    "op" : "query",    #操作型別,有insert、query、update、remove、getmore、command   

    "ns" : "mc.user",  #操作的集合

    "query" : {        #查詢語句

        "mp_id" : 5,

        "is_fans" : 1,

        "latestTime" : {

            "$ne" : 0

        },

        "latestMsgId" : {

            "$gt" : 0

        },

        "$where" : "new Date(this.latestNormalTime)>new Date(this.replyTime)"

    },

    "cursorid" : NumberLong("1475423943124458998"),

    "ntoreturn" : 0,   #返回的記錄數。例如,profile命令將返回一個文件(一個結果檔案),因此ntoreturn值將為1。limit(5)命令將返回五個檔案,因此ntoreturn值是5。如果ntoreturn值為0,則該命令沒有指定一些檔案返回,因為會是這樣一個簡單的find()命令沒有指定的限制。

    "ntoskip" : 0,     #skip()方法指定的跳躍數

    "nscanned" : 304,  #掃描數量

    "keyUpdates" : 0,  #索引更新的數量,改變一個索引鍵帶有一個小的效能開銷,因為資料庫必須刪除舊的key,並插入一個新的key到B-樹索引

    "numYield" : 0,    #該查詢為其他查詢讓出鎖的次數

    "lockStats" : {    #鎖資訊,R:全域性讀鎖;W:全域性寫鎖;r:特定資料庫的讀鎖;w:特定資料庫的寫鎖

        "timeLockedMicros" : {     #鎖

            "r" : NumberLong(19467),

            "w" : NumberLong(0)

        },

        "timeAcquiringMicros" : {  #鎖等待

            "r" : NumberLong(7),

            "w" : NumberLong(9)

        }

    },

    "nreturned" : 101,        #返回的數量

    "responseLength" : 74659, #響應位元組長度

    "millis" : 19,            #消耗的時間(毫秒)

    "ts" : ISODate("2014-02-25T02:13:54.899Z"), #語句執行的時間

    "client" : "127.0.0.1",   #連結ip或則主機

    "allUsers" : [ ],     

    "user" : ""               #使用者

}

scanAndOrder:

scanAndOrder是一個布林值,是True當一個查詢不能使用的檔案的順序在索引中的排序返回結果:MongoDB中必須將其接收到的檔案從一個遊標後的檔案進行排序。

如果scanAndOrder是False,MongoDB的可使用這些檔案的順序索引返回排序的結果。即:True:文件進行排序,False:使用索引。

moved

更新操作在磁碟上移動一個或多個檔案到新的位置。表明本次update是否移動了硬碟上的資料,如果新記錄比原記錄短,通常不會移動當前記錄,如果新記錄比原記錄長,那麼可能會移動記錄到其它位置,這時候會導致相關索引的更新.磁碟操作更多,加上索引

更新,會使得這樣的操作比較慢.

moved:

檔案在磁碟上操作。

nupdated:

更新文件的數目

getmore是一個getmore 操作,getmore通常發生在結果集比較大的查詢時,第一個query返回了部分結果,後續的結果是透過getmore來獲取的。

日常使用profiling的查詢操作

返回最近的10條記錄


db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()


#返回所有的操作,除command型別的


db.system.profile.find( { op: { $ne : 'command' } } ).pretty()

#返回特定集合

db.system.profile.find( { ns : 'mydb.test' } ).pretty()

#返回大於5毫秒慢的操作


db.system.profile.find( { millis : { $gt : 5 } } ).pretty()


#從一個特定的時間範圍內返回資訊

db.system.profile.find(

                       {

                        ts : {

                              $gt : new ISODate("2012-12-09T03:00:00Z") ,

 

                              $lt : new ISODate("2012-12-09T03:40:00Z")

                             }

                       }

                      ).pretty()

#特定時間,限制使用者,按照消耗時間排序

db.system.profile.find(

                       {

                         ts : {

                               $gt : new ISODate("2011-07-12T03:00:00Z") ,

                               $lt : new ISODate("2011-07-12T03:40:00Z")

                              }

                       },

                       { user : 0 }

                      ).sort( { millis : -1 } 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2213189/,如需轉載,請註明出處,否則將追究法律責任。

相關文章