mongodb查询语句时间范围_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的后台日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值