1.用慢查詢?nèi)罩荆╯ystem.profile)找到超過500ms的語句
成都創(chuàng)新互聯(lián)公司是專業(yè)的金平網(wǎng)站建設(shè)公司,金平接單;提供網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行金平網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!mongos>db.setProfilingLevel(1,500)
2.然后再通過.explain()解析影響行數(shù),分析為什么超過500ms【即看執(zhí)行計(jì)劃】 參見下文評(píng)論鏈接
3. 決定是否是缺失索引導(dǎo)致
#查看狀態(tài):級(jí)別和時(shí)間
PRIMARY> db.getProfilingStatus()
{ "was" : 1, "slowms" : 200 }
#查看級(jí)別
PRIMARY> db.getProfilingLevel()
1
#設(shè)置級(jí)別
PRIMARY> db.setProfilingLevel(2)
{ "was" : 1, "slowms" : 100, "ok" : 1 }
#設(shè)置級(jí)別和時(shí)間
PRIMARY> db.setProfilingLevel(1,200)
{ "was" : 2, "slowms" : 100, "ok" : 1 }
Profiling級(jí)別說明
參數(shù):
0:關(guān)閉,不收集任何數(shù)據(jù)。
1:收集慢查詢數(shù)據(jù),默認(rèn)是100毫秒。
2:收集所有數(shù)據(jù)
注意:
1 以上要操作要是在test集合下面的話,只對(duì)該集合里的操作有效,要是需要對(duì)整個(gè)實(shí)例有效,則需要在所有的集合下設(shè)置或則在開啟的時(shí)候開啟參數(shù)
2 每次設(shè)置之后返回給你的結(jié)果是修改之前的狀態(tài)(包括級(jí)別、時(shí)間參數(shù))
2:不通過mongo shell
在mongoDB啟動(dòng)的時(shí)候
mongod --profile=1 --slowms=200
或則在配置文件里添加2行:
profile = 1
slowms = 200
3:關(guān)閉Profiling
# 關(guān)閉
PRIMARY> db.setProfilingLevel(0)
{ "was" : 1, "slowms" : 200, "ok" : 1 }
4:修改“慢查詢?nèi)罩尽钡拇笮?/p>
#關(guān)閉Profiling
PRIMARY> db.setProfilingLevel(0)
{ "was" : 0, "slowms" : 200, "ok" : 1 }
#刪除system.profile集合
PRIMARY> db.system.profile.drop()
慢查詢(system.profile)分析
3.2: 分析
如果發(fā)現(xiàn) millis 值比較大,那么就需要作優(yōu)化。
1 如果nscanned數(shù)很大,或者接近記錄總數(shù)(文檔數(shù)),那么可能沒有用到索引查詢,而是全表掃描。
2 如果 nscanned 值高于 nreturned 的值,說明數(shù)據(jù)庫為了找到目標(biāo)文檔掃描了很多文檔。這時(shí)可以考慮創(chuàng)建索引來提高效率。
‘type’的返回參數(shù)說明:
COLLSCAN #全表掃描
IXSCAN #索引掃描
FETCH #根據(jù)索引去檢索指定document
SHARD_MERGE #將各個(gè)分片返回?cái)?shù)據(jù)進(jìn)行merge
SORT #表明在內(nèi)存中進(jìn)行了排序(與老版本的scanAndOrder:true一致)
LIMIT #使用limit限制返回?cái)?shù)
SKIP #使用skip進(jìn)行跳過
IDHACK #針對(duì)_id進(jìn)行查詢
SHARDING_FILTER #通過mongos #對(duì)分片數(shù)據(jù)進(jìn)行查詢
COUNT #利用db.coll.explain().count()之類進(jìn)行count運(yùn)算
COUNTSCAN #count不使用Index進(jìn)行count時(shí)的stage返回
COUNT_SCAN #count使用了Index進(jìn)行count時(shí)的stage返回
SUBPLA #未使用到索引的$or查詢的stage返回
TEXT #使用全文索引進(jìn)行查詢時(shí)候的stage返回
PROJECTION #限定返回字段時(shí)候stage的返回
對(duì)于普通查詢,我們最希望看到的組合有這些:
Fetch+IDHACK
Fetch+ixscan
Limit+(Fetch+ixscan)
PROJECTION+ixscan
SHARDING_FILTER+ixscan
等
不希望看到包含如下的type:
COLLSCAN(全表掃),SORT(使用sort但是無index),不合理的SKIP,SUBPLA(未用到index的$or)
對(duì)于count查詢,希望看到的有:
COUNT_SCAN
不希望看到的有:
COUNTSCAN
4 性能(explain) 參考mongodb 官網(wǎng)鏈接 見下文評(píng)論