MongoDBスロークエリ最適化
3865 ワード
一、MongoDBスロークエリー(Profiling)レベル説明
1、スロークエリーのオープンと設定①プロファイルの変更(mongo.conf)Profilingのオープン
②mongoshell一時的にプロファイルを開く
2、遅いクエリのサイズを変更する
メモ:
二、遅い照会(
三、日常使用の照会
0: , , 0
1: , 100
2:
1、スロークエリーのオープンと設定①プロファイルの変更(mongo.conf)Profilingのオープン
# ,200
profile = 1
slowms = 200
②mongoshell一時的にプロファイルを開く
##
mongo --host 127.0.0.1:27017 --username --password --authenticationDatabase admin
##
use crm
## Profiling
PRIMARY> db.getProfilingStatus() // :
{ "was" : 1, "slowms" : 100 }
PRIMARY> db.getProfilingLevel() //
1
PRIMARY> db.setProfilingLevel(2) //
{ "was" : 1, "slowms" : 100, "ok" : 1 }
PRIMARY> db.setProfilingLevel(1,200) //
{ "was" : 2, "slowms" : 100, "ok" : 1 }
2、遅いクエリのサイズを変更する
## Profiling
PRIMARY> db.setProfilingLevel(0)
{ "was" : 0, "slowms" : 200, "ok" : 1 }
## system.profile
PRIMARY> db.system.profile.drop()
true
## system.profile
PRIMARY> db.createCollection( "system.profile", { capped: true, size:4000000 } )
{ "ok" : 1 }
## Profiling
PRIMARY> db.setProfilingLevel(1)
{ "was" : 0, "slowms" : 200, "ok" : 1 }
メモ:
Secondary
のsystem.profile
のサイズを変更するには、Secondaryを停止し、独立して実行してから、上記の手順を実行する必要があります.完了したら、レプリカセットへの追加を再起動します.二、遅い照会(
system.profile
)説明PRIMARY> db.system.profile.find().pretty()
{
"op" : "query", # , insert、query、update、remove、getmore、command
"ns" : "crm.customer", #
"command" : { #
"find" : "customer",
"filter" : {
"stores" : 909,
"companyId" : 999
},
"sort" : {
"_id" : -1
},
"limit" : 100000,
},
"cursorid" : NumberLong("8994141675609999540"),
"keysExamined" : 24221,
"docsExamined" : 24221,
"hasSortStage" : true,
"nreturned" : 101, # 。 ,profile ( ), ntoreturn 1。limit(5) , ntoreturn 5。 ntoreturn 0, , find() 。
"ntoskip" : 0, #skip()
"nscanned" : 304, #
"keyUpdates" : 0, # , , key, key B-
"numYield" : 0, #
"lockStats" : { # ,R: ;W: ;r: ;w:
"timeLockedMicros" : { #
"r" : NumberLong(19467),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : { #
"r" : NumberLong(7),
"w" : NumberLong(9)
}
},
"ts" : ISODate("2020-11-18T02:40:53.138Z"), #
"client" : "192.168.0.140", # ip
"allUsers" : [],
"user" : "" #
}
三、日常使用の照会
## 10
db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()
## , command
db.system.profile.find( { op: { $ne : 'command' } } ).pretty()
##
db.system.profile.find( { ns : 'mydb.test' } ).pretty()
## 5
db.system.profile.find( { millis : { $gt : 5 } } ).pretty()
##
db.system.profile.find({
ts : {
$gt : new ISODate("2020-11-17T09:00:00Z") ,
$lt : new ISODate("2020-11-17T09:40:00Z")
}}).pretty()
# , ,
db.system.profile.find({
ts : {
$gt : new ISODate("2020-11-17T09:00:00Z") ,
$lt : new ISODate("2020-11-17T09:40:00Z")
}},
{ user : 0 }
).sort( { millis : -1 } )