MongoDB Database Profiling
MongoDB Profiler是一個(gè)捕獲數(shù)據(jù)庫(kù)執(zhí)行活動(dòng)的系統(tǒng),它可以幫助識(shí)別慢查詢和操作。
Profiling級(jí)別
可用的捕獲級(jí)別意義如下:
級(jí)別設(shè)置
0 禁用
1 啟用,只記錄慢操作
2 啟用,記錄所有操作
查看Profiling級(jí)別
> db.getProfilingLevel()啟用Profiler
> db.setProfilingLevel(1)完整命令為:
db.setProfilingLevel(level,slowms)當(dāng)level為1的時(shí)候,慢操作的默認(rèn)值為100ms,若指定慢操作為500ms:
> db.setProfilingLevel(1,500)注意:
在默認(rèn)情況下,mongod記錄所有的慢查詢(由showOpThresholdMs定義,默認(rèn)值為100ms)到MongoDB日志文件中。
只在關(guān)鍵時(shí)候啟用Profiling,盡量不要在生產(chǎn)環(huán)境啟用它。
基于獨(dú)立mongod實(shí)例啟用Profiling。該設(shè)置將不會(huì)通過副本集或分片集群擴(kuò)散到其他實(shí)例。
查看Profiler結(jié)果
使用的是system.profile 來記錄,而system.profile 是一個(gè)capped collection。在你的數(shù)據(jù)庫(kù)的system.profile集合,調(diào)用mongo shell命令show profile,或者查詢system.profile集合可以查看Profiler的輸出,如:
db.system.profile.find( { millis : { $gt : 1000 } } )就可以輸出,查詢時(shí)間大于1秒的慢查詢。
Profiler信息內(nèi)容詳解
ts-該命令在何時(shí)執(zhí)行.
millis Time-該命令執(zhí)行耗時(shí),以毫秒記.
info-本命令的詳細(xì)信息.
query-表明這是一個(gè)query查詢操作.
ntoreturn-本次查詢客戶端要求返回的記錄數(shù).比如, findOne()命令執(zhí)行時(shí) ntoreturn 為 1.有l(wèi)imit(n) 條件時(shí)ntoreturn為n.
query-具體的查詢條件(如x>3).
nscanned-本次查詢掃描的記錄數(shù).
reslen-返回結(jié)果集的大小.
nreturned-本次查詢實(shí)際返回的結(jié)果集.
update-表明這是一個(gè)update更新操作.
fastmod-Indicates a fast modify operation. See Updates. These operations are normally quite fast.
fastmodinsert – indicates a fast modify operation that performed an upsert.
upsert-表明update的upsert參數(shù)為true.此參數(shù)的功能是如果update的記錄不存在,則用update的條件insert一條記錄.
moved-表明本次update是否移動(dòng)了硬盤上的數(shù)據(jù),如果新記錄比原記錄短,通常不會(huì)移動(dòng)當(dāng)前記錄,如果新記錄比原記錄長(zhǎng),那么可能會(huì)移動(dòng)記錄到其它位置,這時(shí)候會(huì)導(dǎo)致相關(guān)索引的更新.磁盤操作更多,加上索引更新,會(huì)使得這樣的操作比較慢.
insert-這是一個(gè)insert插入操作.
getmore-這是一個(gè)getmore 操作,getmore通常發(fā)生在結(jié)果集比較大的查詢時(shí),第一個(gè)query返回了部分結(jié)果,后續(xù)的結(jié)果是通過getmore來獲取的。
性能優(yōu)化
盡管我們沒有啟用Profiler,但在生產(chǎn)環(huán)境中,我們查看日志文件仍可以看到大于100ms的慢操作。
tail -f /data/var/log/mongodb/mongod.logMon May 25 02:57:22.670 [conn756] query MyTest.Pro query: { $query: { CutePath: /^122-133-1456(-\d+)*$/, Avail.Status: { $lt: 5 }, $or: [ { _id: { $lt: 3310 } }, { _id: { $gt: 8520, $lt: 8530 } }, { _id: { $gt: 9720, $lt: 9730 } } ] }, $orderby: { Avail.Status: 1, AvgRate: -1 } } ntoreturn:200 ntoskip:0 nscanned:18764 scanAndOrder:1 keyUpdates:0 numYields: 10 locks(micros) r:217999 nreturned:200 reslen:563505 116ms如果nscanned(掃描的記錄數(shù))遠(yuǎn)大于nreturned(返回結(jié)果的記錄數(shù))的話,那么我們就要考慮通過加索引來優(yōu)化記錄定位了。
reslen 如果過大,那么說明我們返回的結(jié)果集太大了,這時(shí)請(qǐng)查看find函數(shù)的第二個(gè)參數(shù)是否只寫上了你需要的屬性名。
對(duì)于創(chuàng)建索引的建議是:如果很少讀,那么盡量不要添加索引,因?yàn)樗饕蕉?,寫操作?huì)越慢。如果讀量很大,那么創(chuàng)建索引還是比較劃算的。
參見:
http://docs.mongodb.org/manual/administration/analyzing-mongodb-performance/#database-profiling
http://docs.mongodb.org/master/MongoDB-crud-guide.pdf
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文題目:MongoDBDatabaseProfiling-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://jinyejixie.com/article30/coedpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站、關(guān)鍵詞優(yōu)化、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容