mongodb中怎么利用profiling慢請求監(jiān)控日志,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
站在用戶的角度思考問題,與客戶深入溝通,找到云霄網(wǎng)站設(shè)計(jì)與云霄網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋云霄地區(qū)。0:關(guān)閉,不收集任何數(shù)據(jù)。
1:收集慢查詢數(shù)據(jù),默認(rèn)是100毫秒。
2:收集所有數(shù)據(jù)
查看Profiling和設(shè)置
db.getProfilingStatus()
設(shè)置日志收集級(jí)別和時(shí)間
db.setProfilingLevel(1,3000)
db.system.profiling.find().sort({$natural:-1}).limit(30)
以上要操作要是在test集合下面的話,只對(duì)該集合里的操作有效,要是需要對(duì)整個(gè)實(shí)例有效,則需要在所有的集合下設(shè)置或則在開啟的時(shí)候開啟參數(shù):
關(guān)閉Profiling
db.setProfilingLevel(0)
參數(shù)含義
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, #返回的記錄數(shù)。例如,profile命令將返回一個(gè)文檔(一個(gè)結(jié)果文件),因此ntoreturn值將為1。limit(5)命令將返回五個(gè)文件,因此ntoreturn值是5。如果ntoreturn值為0,則該命令沒有指定一些文件返回,因?yàn)闀?huì)是這樣一個(gè)簡單的find()命令沒有指定的限制。
"ntoskip" : 0, #skip()方法指定的跳躍數(shù)
"nscanned" : 304, #掃描數(shù)量
"keyUpdates" : 0, #索引更新的數(shù)量,改變一個(gè)索引鍵帶有一個(gè)小的性能開銷,因?yàn)閿?shù)據(jù)庫必須刪除舊的key,并插入一個(gè)新的key到B-樹索引
"numYield" : 0, #該查詢?yōu)槠渌樵冏尦鲦i的次數(shù)
"lockStats" : { #鎖信息,R:全局讀鎖;W:全局寫鎖;r:特定數(shù)據(jù)庫的讀鎖;w:特定數(shù)據(jù)庫的寫鎖
"timeLockedMicros" : { #鎖
"r" : NumberLong(19467),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : { #鎖等待
"r" : NumberLong(7),
"w" : NumberLong(9)
}
},
"nreturned" : 101, #返回的數(shù)量
"responseLength" : 74659, #響應(yīng)字節(jié)長度
"millis" : 19, #消耗的時(shí)間(毫秒)
"ts" : ISODate("2014-02-25T02:13:54.899Z"), #語句執(zhí)行的時(shí)間
"client" : "127.0.0.1", #鏈接ip或則主機(jī)
"allUsers" : [ ],
"user" : "" #用戶
}
scanAndOrder:
scanAndOrder是一個(gè)布爾值,是True當(dāng)一個(gè)查詢不能使用的文件的順序在索引中的排序返回結(jié)果:MongoDB中必須將其接收到的文件從一個(gè)游標(biāo)后的文件進(jìn)行排序。
如果scanAndOrder是False,MongoDB的可使用這些文件的順序索引返回排序的結(jié)果。即:True:文檔進(jìn)行排序,F(xiàn)alse:使用索引。
moved
更新操作在磁盤上移動(dòng)一個(gè)或多個(gè)文件到新的位置。表明本次update是否移動(dòng)了硬盤上的數(shù)據(jù),如果新記錄比原記錄短,通常不會(huì)移動(dòng)當(dāng)前記錄,如果新記錄比原記錄長,那么可能會(huì)移動(dòng)記錄到其它位置,這時(shí)候會(huì)導(dǎo)致相關(guān)索引的更新.磁盤操作更多,加上索引
更新,會(huì)使得這樣的操作比較慢.
moved:
文件在磁盤上操作。
nupdated:
更新文檔的數(shù)目
getmore是一個(gè)getmore 操作,getmore通常發(fā)生在結(jié)果集比較大的查詢時(shí),第一個(gè)query返回了部分結(jié)果,后續(xù)的結(jié)果是通過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()
#從一個(gè)特定的時(shí)間范圍內(nèi)返回信息
db.system.profile.find(
{
ts : {
$gt : new ISODate("2012-12-09T03:00:00Z") ,
$lt : new ISODate("2012-12-09T03:40:00Z")
}
}
).pretty()
#特定時(shí)間,限制用戶,按照消耗時(shí)間排序
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 }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。