MongoDBモニタリングのログが遅い

3、遅いログ

1.現在の低速ログのオープンステータスを確認します

rs0:PRIMARY> db.getProfilingLevel()
1
rs0:PRIMARY> db.getProfilingStatus()
{ "was" : 1, "slowms" : 10 }
  • 「だった」:
    0:開いていない
    1:遅いクエリログを記録する
    2:すべてのクエリログを記録する
  • 「Slowms」:
    デフォルト100、遅いログを記録するためのしきい値、単位はms

2.遅いログパラメータ設定

基本構文:

db.setProfilingLevel( "was"、 "slowms")

例:

rs0:PRIMARY> db.setProfilingLevel(1,10)
{ "was" : 1, "slowms" : 10, "ok" : 1 }

3.遅いログコンテンツを表示する

1.基本的なコマンド

db.system.profile.find()

  • 実行時間が特定のしきい値を超える低速ログを表示します:db.system.profile.find({"millis":{$ gt:10000}})
  • 最新の低速ログ情報を表示します:db.system.profile.find()。sort({$ natural:-1})。limit(1)

2.プロファイル情報コンテンツの詳細な説明:

system.profile.op:记录具体做的操作类型(insert、query、update、remove、、getmore、command)
system.profile.ns:该项表明该慢日志是哪个库下的哪个集合所对应的慢日志。
system.profile.query:该项详细输出了慢日志的具体语句和行为
system.profile.keysExamined:该项表明为了找出最终结果MongoDB搜索了多少个key
system.profile.docsExamined:该项表明为了找出最终结果MongoDB搜索了多少个文档
system.profile.keyUpdates:该项表名有多少个index key在该操作中被更改,更改索引键也会有少量的性能消耗,因为数据库不单单要删除旧Key,还要插入新的Key到B-Tree索引中
system.profile.writeConflicts:写冲突发生的数量,例如update一个正在被别的update操作的文档
system.profile.numYield:为了让别的操作完成而屈服的次数,一般发生在需要访问的数据尚未被完全读取到内存中,MongoDB会优先完成在内存中的操作
system.profile.locks:在操作中产生的锁,
	锁的种类有多种,如下:
		Global	Represents global lock.
		MMAPV1Journal	Represents MMAPv1 storage engine specific lock to synchronize journal writes; for non-MMAPv1 storage engines, the mode forMMAPV1Journal is empty.
		Database	Represents database lock.
		Collection	Represents collection lock.
		Metadata	Represents metadata lock.
		oplog	Represents lock on the oplog.
	
	锁的模式也有多种,如下:
		Lock Mode	Description
		R	Represents Shared (S) lock.
		W	Represents Exclusive (X) lock.
		r	Represents Intent Shared (IS) lock.
		w	Represents Intent Exclusive (IX) lock.
system.profile.locks.acquireCoun:在各种不用的种类下,请求锁的次数
system.profile.nreturned:该操作最终返回文档的数量
system.profile.responseLength:结果返回的大小,单位为bytes,该值如果过大,则需考虑limit()等方式减少输出结果
system.profile.millis:该操作从开始到结束耗时多少,单位为毫秒
system.profile.execStats:包含了一些该操作的统计信息,只有query类型的才会显示
system.profile.execStats.stage:包含了该操作的详细信息,例如是否用到索引
system.profile.ts:该操作执行时的时间
system.profile.client:哪个客户端发起的该操作,并显示出该客户端的ip或hostname
system.profile.allUsers:哪个认证用户执行的该操作
system.profile.user:是否认证用户执行该操作,如认证后使用其他用户操作,该项为空

3.例

> db.system.profile.find().sort({$natural:-1}).limit(1)
{
    "op" : "query",                                 //查询
    "ns" : "admin.system.profile",                  //数据库
    "query" : {
         "query" : {  },                            //查询字段
         "orderby" : { "$natural" : -1 }            //查询条件
    }, 
    "ntoreturn" : 1,                                //                        
    "ntoskip" : 0,                                  //指定skip()方法跳过的文档数量
    "nscanned" : 0,                                 //在index中扫描文档数
    "nscannedObjects" : 1,                          //在collection中扫描文档数
    "keyUpdates" : 0,                               //index key更新数
    "writeConflicts" : 0,                           //发生写冲突数
    "numYield" : 0,                                 //在数据还没有完全读取到内存时,为了让别的操作完成屈服次数
    "locks" : {     //R:全局读锁,W全局写锁,r特定数据库读锁,w特定数据库写锁
        "Global" : {
            "acquireCount" : { "r" : NumberLong(2) }    //获取锁的时间消耗
        }, 
        "MMAPV1Journal" : {
            "acquireCount" : { "r" : NumberLong(1) } 
        }, 
        "Database" : {
            "acquireCount" : { "r" : NumberLong(1) } 
        }, 
        "Collection" : {
            "acquireCount" : { "R" : NumberLong(1) }
            
        }
    }, 
    "nreturned" : 1,                                //返回文档数
    "responseLength" : 591,                         //返回结果集字节长度
    "millis" : 1,                                   //操作耗时
    "execStats" : {                                 //操作的一些统计信息,只有query才会有
        "stage" : "COLLSCAN",                       //是否使用索引
        "filter" : { "$and" : [ ] }, 
        "nReturned" : 1, 
        "executionTimeMillisEstimate" : 0, 
        "works" : 2, 
        "advanced" : 1, 
        "needTime" : 1, 
        "needFetch" : 0, 
        "saveState" : 0, 
        "restoreState" : 0, 
        "isEOF" : 0,                                //是否为文件结束符
        "invalidates" : 0, 
        "direction" : "backward", 
        "docsExamined" : 1 
    }, 
    "ts" : ISODate("2018-11-16T06:53:42.980Z"),     //操作时间
    "client" : "127.0.0.1",                         //操作客户端
    "allUsers" : [ { "user" : "root", "db" : "admin" } ],   //操作认证用户
    "user" : "root@admin"                           //是否使用认证用户执行的操作,如果不是认证用户则显示为空
}

おすすめ

転載: blog.csdn.net/weixin_37692493/article/details/113763366