1:Profiling级别说明
0:关闭,不收集任何数据。 1:收集慢查询数据,默认是100毫秒。 2:收集所有数据
2: 开启Profiling和设置

  1. 1:通过mongo shell:
  2. #查看状态:级别和时间
  3. drug:PRIMARY> db.getProfilingStatus()
  4. { "was" : 1, "slowms" : 100 }
  5. #查看级别
  6. drug:PRIMARY> db.getProfilingLevel()
  7. #设置级别
  8. drug:PRIMARY> db.setProfilingLevel(2)
  9. { "was" : 1, "slowms" : 100, "ok" : 1 }
  10. #设置级别和时间
  11. drug:PRIMARY> db.setProfilingLevel(1,200)
  12. { "was" : 2, "slowms" : 100, "ok" : 1 }

  13. 以上要操作要是在test集合下面的话,只对该集合里的操作有效,要是需要对整个实例有效,则需要在所有的集合下设置或则在开启的时候开启参数:
  14. 2:不通过mongo shell:
  15. mongod --profile=1 --slowms=15
  16. 或则在配置文件里添加2行:
  17. profile = 1
  18. slowms = 300
3:修改“慢查询日志”的大小

  1. #关闭Profiling
  2. drug:PRIMARY> db.setProfilingLevel(0)
  3. { "was" : 0, "slowms" : 200, "ok" : 1 }
  4. #删除system.profile集合
  5. drug:PRIMARY> db.system.profile.drop()
  6. true
  7. #创建一个新的system.profile集合
  8. drug:PRIMARY> db.createCollection( "system.profile", { capped: true, size:4000000 } )
  9. { "ok" : 1 }
  10. #重新开启Profiling
  11. drug:PRIMARY> db.setProfilingLevel(1)
  12. { "was" : 0, "slowms" : 200, "ok" : 1 }

输出说明

  1. drug:PRIMARY> db.system.profile.find().pretty()
  2. {
  3.     "op" : "query", #操作类型,有insert、query、update、remove、getmore、command
  4.     "ns" : "mc.user", #操作的集合
  5.     "query" : { #查询语句
  6.         "mp_id" : 5,
  7.         "is_fans" : 1,
  8.         "latestTime" : {
  9.             "$ne" : 0
  10.         },
  11.         "latestMsgId" : {
  12.             "$gt" : 0
  13.         },
  14.         "$where" : "new Date(this.latestNormalTime)>new Date(this.replyTime)"
  15.     },
  16.     "cursorid" : NumberLong("1475423943124458998"),
  17.     "ntoreturn" : 0, #返回的记录数。例如,profile命令将返回一个文档(一个结果文件),因此ntoreturn值将为1。limit(5)命令将返回五个文件,因此ntoreturn值是5。如果ntoreturn值为0,则该命令没有指定一些文件返回,因为会是这样一个简单的find()命令没有指定的限制。
  18.     "ntoskip" : 0, #skip()方法指定的跳跃数
  19.     "nscanned" : 304, #扫描数量
  20.     "keyUpdates" : 0, #索引更新的数量,改变一个索引键带有一个小的性能开销,因为数据库必须删除旧的key,并插入一个新的key到B-树索引
  21.     "numYield" : 0, #该查询为其他查询让出锁的次数
  22.     "lockStats" : { #锁信息,R:全局读锁;W:全局写锁;r:特定数据库的读锁;w:特定数据库的写锁
  23.         "timeLockedMicros" : { #锁
  24.             "r" : NumberLong(19467),
  25.             "w" : NumberLong(0)
  26.         },
  27.         "timeAcquiringMicros" : { #锁等待
  28.             "r" : NumberLong(7),
  29.             "w" : NumberLong(9)
  30.         }
  31.     },
  32.     "nreturned" : 101, #返回的数量
  33.     "responseLength" : 74659, #响应字节长度
  34.     "millis" : 19, #消耗的时间(毫秒)
  35.     "ts" : ISODate("2014-02-25T02:13:54.899Z"), #语句执行的时间
  36.     "client" : "127.0.0.1", #链接ip或则主机
  37.     "allUsers" : [ ],
  38.     "user" : "" #用户
  39. }

日常查询

点击(此处)折叠或打开

  1. #返回最近的10条记录
  2. db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()

  3. #返回所有的操作,除command类型的
  4. db.system.profile.find( { op: { $ne : 'command' } } ).pretty()

  5. #返回特定集合
  6. db.system.profile.find( { ns : 'mydb.test' } ).pretty()

  7. #返回大于5毫秒慢的操作
  8. db.system.profile.find( { millis : { $gt : 5 } } ).pretty()

  9. #从一个特定的时间范围内返回信息
  10. db.system.profile.find(
  11.                        {
  12.                         ts : {
  13.                               $gt : new ISODate("2012-12-09T03:00:00Z") ,
  14.                               $lt : new ISODate("2012-12-09T03:40:00Z")
  15.                              }
  16.                        }
  17.                       ).pretty()

  18. #特定时间,限制用户,按照消耗时间排序
  19. db.system.profile.find(
  20.                        {
  21.                          ts : {
  22.                                $gt : new ISODate("2011-07-12T03:00:00Z") ,
  23.                                $lt : new ISODate("2011-07-12T03:40:00Z")
  24.                               }
  25.                        },
  26.                        { user : 0 }
  27.                       ).sort( { millis : -1 } )



10-10 01:30