標籤:
建議使用方法三,最簡單且容易查看
一:如果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)改回去。
mongodb啟用Profiling定位問題