温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mongodb 慢查询日志使用参考

发布时间:2020-06-09 18:00:23 来源:网络 阅读:3317 作者:春秋小记 栏目:MongoDB数据库

mongodb的Profiling功能->慢查询功能

    Profiling 把收集到的信息写入到system.profile集合中,system.profile集合是一个capped collection。

1.定位mongodb慢查询语句方法:
     开启Profiling功能,通过定位慢查询日志,找到执行比较慢的语句,然后进行优化,思路如下:
     a.查询慢查询日志(system.profile)找到超过定义时间的慢查询语句;
     b.explain()查看执行计划,可以参考如下文章:https://blog.51cto.com/1937519/2301699
     c.确定语句慢的原因,如缺少索引,业务批量问题等,思路与传统的rdbms的sql优化等同;
   
2.开启慢查询:
   2.1:Profiling级别说明:
      a.0:关闭,不收集任何数据。
      b.1:收集慢查询数据,默认是100毫秒。
      c.2:收集所有数据
    
   2.2:数据库慢查询配置(注意写入配置文件,重启后生效):
      a.查看状态:级别和时间
      repsetzhou:PRIMARY> db.getProfilingStatus()
       { "was" : 1, "slowms" : 200 }

     b.查看级别
      repsetzhou:PRIMARY> db.getProfilingLevel()
      1

     c.设置级别
      repsetzhou:PRIMARY>  db.setProfilingLevel(2)
      { "was" : 1, "slowms" : 200, "ok" : 1 }

     d.确认设置级别:
      repsetzhou:PRIMARY> db.getProfilingLevel()
      2

     e.说明:设置级别和时间(1000 相当于1s)
      repsetzhou:PRIMARY> db.setProfilingLevel(1,1000) ###(包括级别、时间参数,时间是毫秒单位)
      { "was" : 2, "slowms" : 1000, "ok" : 1 }

2.3:在配置文件中开启慢查询:

     operationProfiling:
           slowOpThresholdMs: 200
           mode: slowOp

3.关闭Profiling:
      a.关闭:
      repsetzhou:PRIMARY> db.setProfilingLevel(0)
      { "was" : 2, "slowms" : 1000, "ok" : 1 }
      b.确认:
      repsetzhou:PRIMARY> db.getProfilingStatus()
      { "was" : 0, "slowms" : 1000 }

4.修改system.profile的大小:

    a.关闭Profiling:
      repsetzhou:PRIMARY> db.setProfilingLevel(0)
      { "was" : 0, "slowms" : 200, "ok" : 1 }
     b.删除system.profile集合:
      repsetzhou:PRIMARY> db.system.profile.drop()
       true
     c.创建一个新的system.profile集合 - 10M:
      repsetzhou:PRIMARY>db.createCollection( "system.profile", { capped: true, size:10000000 } )
      { "ok" : 1 }
     d.重新开启Profiling:
     repsetzhou:PRIMARY> db.setProfilingLevel(1)
      { "was" : 0, "slowms" : 200, "ok" : 1 }


5.1慢查询(system.profile)分析:

   repsetzhou:PRIMARY> db.system.profile.find()

   a.查询大于指定时间如500毫秒:

   db.system.profile.find({"millis":{$gte:500}})

   b.查询指定时间慢查询:

    db.system.profile.find(
                       {
                        ts : {
                              $gt : new ISODate("2018-10-22T03:01:45.976Z"),
                              $lt : new ISODate("2018-10-22T03:01:48.976Z")
                             }
                       }
                      )

    c.显示5最近的事件:

    show profile

5.2:在mongodb的日志文件中同样记录慢查询日志,如果system.profile已经被覆盖,可以参考mongodb的后台日志。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI