2 回答

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

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