mongo如何查询慢日志以及创建索引

74次阅读
没有评论

共计 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 如何查询慢日志以及创建索引”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3539字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)