### **1、描述:** 我們使用釘釘做數(shù)據(jù)庫(kù)慢日志告警,8月27號(hào)收到大量的全表掃描的告警信息,登錄到相關(guān)業(yè)務(wù)的服務(wù)器打開(kāi)日志,開(kāi)始搜索相關(guān)日志,看到如下的日志信息。 #### **1.1、分析一下日志:**執(zhí)行操作的具體時(shí)間、連接的id信息, 后邊是.對(duì)哪個(gè)庫(kù)的那個(gè)表進(jìn)行的操作,執(zhí)行具體的操作為find .篩選的條件為{ id:28137 }取一行,:true 確認(rèn)是否在第一批之后關(guān)閉光標(biāo),默認(rèn)為false,$db:數(shù)據(jù)庫(kù)名字mongo查詢大量數(shù)據(jù)慢,全表掃描掃描了行、查詢耗時(shí)325毫秒。### **2、排查:**因?yàn)槲覀僟id是主鍵,默認(rèn)是有索引的,是否是業(yè)務(wù)新添加了id的字段,我們需要檢查一下這張表的索引和數(shù)據(jù)字段。連接復(fù)制集群的一個(gè)節(jié)點(diǎn)查看索引:```rs2:> db..()[{"v" : 1,"key" : {"" : 1},"name" : "","ns" : "check."},{"v" : 1,"key" : {"" : 1},"name" : "","ns" : "check."},{"v" : 1,"key" : {"_id" : 1},"name" : "_id_","ns" : "check."}]```#### **2..1、查看表數(shù)據(jù)**我這里只展示部分?jǐn)?shù)據(jù)mongo查詢大量數(shù)據(jù)慢,沒(méi)有查看到新添加的id字段。
```rs2:> db..find(){ "_id" : (), "num" : (10), "" : ("69") }{ "_id" : (), "num" : (10), "" : ("74") }{ "_id" : (), "num" : (1), "" : ("16") }{ "_id" : (), "num" : (1), "" : ("62") }```#### **2.2、和業(yè)務(wù)先溝通**和業(yè)務(wù)線進(jìn)行溝通是否有新上線業(yè)務(wù),確認(rèn)以后和業(yè)務(wù)一起查看業(yè)務(wù)查詢表的代碼。
仔細(xì)檢查代碼發(fā)現(xiàn)在轉(zhuǎn)換上缺少了一個(gè)下劃線**where("_id").is("id")**#### **2.3、執(zhí)行計(jì)劃**我們可以使用的來(lái)幫助我們分析數(shù)據(jù)庫(kù)執(zhí)行計(jì)劃。> db..find({"_id":})