共计 3539 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章给大家分享的是有关 mongo 如何查询慢日志以及创建索引的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。
1. 查看 mongodb 慢日志是否开起
use LogDB;
db.getProfilingStatus();
2. 开启慢日志,设置超过 100 毫秒的操作为慢操作
db.setProfilingLevel(1,100);
3. 查看慢日志内容
db.system.profile.find().sort({$natural:-1})
日志,
shard3:PRIMARY db.system.profile.find().sort({$natural:-1})
{op : query , ns : LogDB.Flashxxx , command : { find : Flashxxx , filter : { UserId : { $in : [ 1111111] } }, shardVersion : [Timestamp(0, 0), ObjectId(000000000000000000000000) ], lsid : {id : UUID( d08179ba-ecbd-4f9d-92e7-cd491e5a1d8a), uid : BinData(0, iwsImy7Wfk2mAp4o/uuD+I9mpETQTxb5PXo26pIQkS4=) }, $clusterTime : {clusterTime : Timestamp(1558696199, 3), signature : {hash : BinData(0, Ht7EWhYpVLiy+DbH8Cu1Ijs6PNk=), keyId : NumberLong(6647500774429425691) } }, $client : {driver : { name : mongo-csharp-driver , version : 2.7.0.0}, os : {type : Windows , name : Microsoft Windows 6.3.9600 , architecture : x86_64 , version : 6.3.9600}, platform : .NET Framework 4.0.0.0 , mongos : {host : new-mongo01:20000 , client : 10.205.33.32:59518 , version : 3.6.9} }, $configServerState : {opTime : { ts : Timestamp(1558696196, 12), t : NumberLong(3) } }, $db : LogDB }, keysExamined : 0, docsExamined : 37428, cursorExhausted : true, numYield : 292, locks : {Global : { acquireCount : { r : NumberLong(586) } }, Database : {acquireCount : { r : NumberLong(293) } }, Collection : {acquireCount : { r : NumberLong(293) } } }, nreturned : 1, responseLength : 673, protocol : op_msg , millis : 104, planSummary : COLLSCAN , execStats : {stage : COLLSCAN , filter : { UserId : { $eq : 11111111115} }, nReturned : 1, executionTimeMillisEstimate : 100, works : 37430, advanced : 1, needTime : 37428, needYield : 0, saveState : 292, restoreState : 292, isEOF : 1, invalidates : 0, direction : forward , docsExamined : 37428 }, ts : ISODate(2019-05-24T11:09:59.346Z), client : 10.205.34.91 , allUsers : [{ user : __system , db : local} ], user : __system@local }
注意 COLLSCAN 是全表扫描。
查看执行计划:
db.FlashClientData.find({UserId: 1000493111}).explain()
shard3:PRIMARY db.FlashClientData.find({UserId: 100049111}).explain()
{
queryPlanner : {
plannerVersion : 1,
namespace : LogDB.Flashxxx ,
indexFilterSet : false,
parsedQuery : {
UserId : {
$eq : 10×0493111
}
},
winningPlan : {
stage : COLLSCAN , —- 全表扫描
filter : {
UserId : {
$eq : 10×0493111
}
},
direction : forward
},
rejectedPlans : []
},
创建索引:
db.Flashxxx.createIndex({UserId: 1} ) // 按 age 字段创建升序索引
db.Flashxxx.getIndexes() // 查询集合的索引信息
shard3:PRIMARY db.FlashClientData.find({UserId: 100049111}).explain()
{
queryPlanner : {
plannerVersion : 1,
namespace : LogDB.FlashClientData ,
indexFilterSet : false,
parsedQuery : {
UserId : {
$eq :
100049111
}
},
winningPlan : {
stage : FETCH ,
inputStage : {
stage : IXSCAN ,,
keyPattern : {
UserId : 1
},
indexName : UserId_1 ,
isMultiKey : false,
multiKeyPaths : {
UserId : []
},
isUnique : false,
删除指定的索引 dropIndex()
db.COLLECTION_NAME.dropIndex(INDEX-NAME)
如,删除集合 sites 中名为 name_1_domain_-1 的索引:
单字段索引(Single Field Index)
db.person.createIndex({age: 1} )
{age: 1} 代表升序索引,也可以通过 {age: -1} 来指定降序索引,对于单字段索引,升序 / 降序效果是一样的。
单索引创建唯一索引,如:
db.persons.createIndex({name:1},{unique:true})
复合索引 (Compound Index)
db.person.createIndex({age: 1, name: 1} )
多 key 索引(Multikey Index)
{name : jack , age : 19, habbit: [ football, runnning]}
db.person.createIndex({habbit: 1} ) // 自动创建多 key 索引
db.person.find({habbit: football} )
感谢各位的阅读!关于“mongo 如何查询慢日志以及创建索引”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!