天天看點

mongodb 之慢查詢

mongodb中慢查詢日志

1.開啟查詢日志.

(1)動态開啟,可以選擇性的對指定DB開啟慢查詢日志,但伺服器重新開機後慢查詢日志又要人工手動開啟。

db.setProfilingLevel(1,300)

setProfilingLevel有兩個參數,第一參數表示慢查詢日志開關(可使用的值為0,1,2

0:表示關閉慢查詢日志,1:表示開啟慢查詢日志,2:表示記錄所有資料庫中的查詢),

第二個參數為慢查詢閥值,機關是毫秒,預設情況下閥值為100ms。

(2).配置檔案中開啟,永久生效。對所有的資料DB生效

在mongo的配置檔案中加上一下兩個參數即可永久開啟慢查詢。

profile:表示慢查詢日志開關.

slowms:慢查詢日志閥值。

和setProfilingLevel中的兩個參數對應。

2.檢視伺服器慢查詢日志狀态

db.getProfilingStatus()

rs0:SECONDARY>  db.getProfilingStatus();

{ "was" : 1, "slowms" : 100 }

db.getProfilingLevel()

rs0:SECONDARY> db.getProfilingLevel()

1

3.檢視滿查詢日志。

一般情況下,當開啟慢查詢日志後會在每個db下面生成一個集合(system.profile).

這個集合裡面記錄了所有目前資料庫查詢時間超過閥值的查詢記錄。

rs0:PRIMARY> db.system.profile.find({ns:/^gow/}).limit(1)

{"op" : "update", 

"ns" : "gow.broadcasts", 

"query" : { "_id" : ObjectId("54b73af6bab3047b5593c456") }, 

"updateobj" : { "_id" : ObjectId("54b73af6bab3047b5593c456"), "content" : "各新石"}, 

"nscanned" : 0, 

"nscannedObjects" : 0, 

"nMatched" : 1, 

"nModified" : 0, 

"upsert" : true, 

"keyUpdates" : 0, 

"numYield" : 0, 

"lockStats" : { "timeLockedMicros" : { "r" : NumberLong(0) , "w" : NumberLong(10) } }, 

"millis" : 157, 

"execStats" : {  }, 

"ts" : ISODate("2015-01-26T19:05:00.118Z"), 

"client" : "10.136.3.117", 

"allUsers" : [ { "user" : "root", "db" : "admin" } ], "user" : "root@admin" }

鍵值解釋:

op:操作類型。

ns:執行操作的對象集合

millis:操作所花時間,毫秒 

client:執行操作的客服端。

allUsers:執行操作的mongodb賬号

ts:時間戳(操作的發生時間)