2 回答

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

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