2 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
用過一段時(shí)間mongo,簡(jiǎn)單寫下debug的過程
1.mongostat 查看下mongo當(dāng)前的運(yùn)行情況,主要關(guān)注下flushes、locked db的值,對(duì)當(dāng)前mongo的運(yùn)行情況有個(gè)大致的了解
2.在mongo shell 使用db.currentOp()查看當(dāng)前的operation,查看是否有長(zhǎng)時(shí)間執(zhí)行的sql,如果有對(duì)sql進(jìn)行explain,看是否有索引、是否走了索引、是否能通過索引就獲得查詢結(jié)果等;
3.mongo慢的情況一般都是沒有建立索引、或者索引建的不恰當(dāng)造成;由于mongo是在熱點(diǎn)數(shù)據(jù)和索引都在內(nèi)存中時(shí),性能最好,如果建立太多的索引 也有可能造成查詢性能降低,很低,explain發(fā)現(xiàn)yeild次數(shù)很多或者scan對(duì)象特別多;
4.在生產(chǎn)環(huán)境中,使用background:true來建立索引,防止mongo不可用;如果是master-slave的結(jié)構(gòu),建立索引的操作傳遞到slave實(shí)例上時(shí),有可能不是background的方式建立索引(發(fā)生過一次,沒有再次確認(rèn)),所以使用master-slave來做讀寫分離時(shí),需要關(guān)注下slave節(jié)點(diǎn)是否正常相應(yīng)請(qǐng)求。
就醬

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
MongoDb一般不會(huì)長(zhǎng)時(shí)間占用IO,我猜測(cè)這種情況可能與你某個(gè)查詢沒有寫對(duì)有關(guān),可能是因?yàn)槟撤N情況下觸發(fā)了一條慢查詢,而這條慢查詢又?jǐn)D占了MongoDb大部分的內(nèi)存緩存的用量,導(dǎo)致這時(shí)候大部分查詢都要走硬盤IO,才會(huì)增加wa的增大。
- 2 回答
- 0 關(guān)注
- 750 瀏覽
添加回答
舉報(bào)