建議使用方法三,最簡單且容易查看
一:如果mongodb已經運行了很長時間,此時查看mongod.log很大,沒法打開查看相應信息
#ps -ef|grep mongod
找到相應的mongod的進程的pid
然后kill -SIGUSR1 pid 這樣mongod就會重新生成一個日志文件
> db.setProfilingLevel(2);
{"was" : 0 , "ok" : 1}
> db.getProfilingLevel()
上面斜體的級別可以取0,1,2 三個值,他們表示的意義如下:
0 – 不開啟
1 – 記錄慢命令 (默認為>100ms)
2 – 記錄所有命令
開啟profiling后在mongod節點的log日志中查看
cat mongod.log
或是tail -300 mongod.log
二.
以后你們遇到了這種某個操作慢的問題直接從數據庫里在小數據下打開第5級log,看看它訪問了那些表格,直接去看Py中有沒有index
一般說來只要系統不癱瘓,沒有index是慢的直接原因
db.adminCommand({logRotage:1})
kill -SIGUSR1 xxx
db.setLogLevel(1, "query")
db.setLogLevel(1, "command")
三
為了以后盡快的定位專屬MongoDB的問題,請你們如果發現哪個操作或者並行操作性能慢的話幫忙抓取一下MongoDB log。
分為兩方面:
Profiling: 如果我們定義所有的慢於100ms的數據庫操作多為慢操作的話做如下操作:
use MyDomain
db.setProfilingLevel(1, 100), 用你測試的Domain 替換MyDomain
這樣所有的慢操作都會在 db.system.profile這里顯示。
db.setProfilingLevel(2) 是打開所有操作profile, 可以實驗用,或者短時打開。但是一定要及時關閉。
show collections 會看到多了一個collection 叫system.profile
然后db.system.profile.find().pretty()
Log: 用db.setLogLevel(1,command)可以看到所有的操作,每個操作的用時都會記錄下來。
記得定位后用db.setLogLevel(0,command)改回去。