MongoDB資料庫效能分析

chenfeng發表於2015-12-24

設定當前資料庫日誌級別:

db.setProfilingLevel(n);

 

引用
n:
0 - 關閉效能分析,測試環境可以開啟,生成環境關閉,對效能有很大影響
1 - 開啟慢查詢日誌,執行時間大於100毫秒的語句
2 - 開啟所有操作日誌


獲取當前資料庫日誌分析級別:

db.getProfilingLevel();


資料庫的日誌分析資料一般存放在當前資料庫的 system.profile 集合中

檢視當前庫下所有集合的分析資料

db.system.profile.find()



檢視某一個集合的分析資料

db.system.profile.find({info:/user.info/})



檢視執行時間大於100毫秒的執行操作,並倒序排列,並取前5行

db.system.profile.find({millis:{gt:100}}).sort({ natural:-1}).limit(5);



分析執行操作的效能引數:

query: { uid: 200001.0 }  nreturned:0 bytes:20", "millis" : 0 }
{ "ts" : "Tue Jun 01 2010 12:27:30 GMT+0800 (CST)", "info" : "query mosh.users ntoreturn:1000

reslen:36 nscanned:1  
query: { uid: 200001.0 }  nreturned:0 bytes:20", "millis" : 0 }
{ "ts" : "Tue Jun 01 2010 12:27:30 GMT+0800 (CST)", "info" : "query mosh.users ntoreturn:1000

reslen:36 nscanned:1  



引數介紹:

引用
ts:操作執行時的時間戳
millis:執行操作所花的時間
info:
        query:資料庫查詢操作,查詢欄位資訊包括ntoreturn,query,nscanned,reslen,nreturned
                ntoreturn:從查詢中返回客戶端指定的物件數
                query:查詢操作資訊
                nscanned:在執行查詢操作的時候掃描了多少物件
                reslen:查詢結果的大小
                nreturned:從查詢中返回的結果物件


        update:資料庫更新操作,
        insert:資料庫插入操作
        getmore:大資料量查詢



查詢最佳化
1、如果nscanned 比 nreturned 大很多時,說明資料庫掃描了很大物件才找到目標物件,因此需要為條件查

詢建立索引
2、當返回的結果集很大時即reslen值相當大時,會影響效能下降,在做find查詢時,需要新增第二個查詢引數

,只獲取需要顯示的欄位


更新最佳化:
1、檢查nscanned欄位,如果欄位非常大,資料庫需要掃描大量的物件才能查詢到並更新,如果更新頻率比較

大的話,建議建立索引
2、儘可能的使用快速的修改操作

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1952662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章