文章目录
- 一、开启Profiling慢日志
-
- 1)开启Profiling的三种方式
-
- 1、全局开启Profiling
- 2、配置文件设置开启
- 3、mongo shell设置开启
- 2)Profiling的级别
- 3)Profile的相关信息解释
- 4)查询Profile记录语句
- 5)清除Profile慢日志并查看配置
一、开启Profiling慢日志
1)开启Profiling的三种方式
1、全局开启Profiling
如果想要全局开启Profiling,则可以在mongod启动时加上参数
1 | mongod --profile 1 --slowms100 # 1表示追踪级别,100表示慢查询判定时间(ms) |
2、配置文件设置开启
配置文件添加如下配置:
1 2 3 | operationProfiling: slowOpThresholdMs: 100 mode: slowOp |
3、mongo shell设置开启
mongo shell进行实时配置,命令如下:
1 2 | > db.setProfilingLevel(1,200) ---1表示level,200表示慢查询时间(ms),也可以省略时间设置 { "was" : 1, "slowms" : 100, "ok" : 1 } ---100表示之前的慢查询时间设定值 |
1 2 | > db.getProfilingStatus() ---查询当前慢查询的状态信息 { "was" : 1, "slowms" : 200 } ---was后的值表示级别 |
1 2 | > db.getProfilingLevel() ---只查询Profiling级别可用此命令 1 |
2)Profiling的级别
1 2 3 | 0 – 不开启 1 – 记录慢命令 (默认为>100ms) 2 – 记录所有命令 |
3)Profile的相关信息解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ? op:操作的类型,比如:insert,query,command,remove... ? ns:被查询目标的命名空间,一般是数据库名和collection名的组合 ? query:查询的具体语句,如果是insert操作,则会是insert的语句 ? command:如果操作是一个command,则command语句记录在此 ? keysExamined:以前是nscanned,3.2版本之后改为keysExamined,表示执行此次操作所扫描的索引键记录数 ? updateobj:如果操作是一个update,则update语句记录在此 ? ndeleted:此次操作删除的文档数 ? ninserted: 此次操作插入的文档数 ? nModified:此次操作的update的文档数 ? writeConflicts:如果一个update语句正在操作一个文档,而另一个update同时进行操作此文档,从而造成的冲突数量 ? locks:此次操作产生锁的相关信息 ? nreturned:此次操作返回的文档数 ? responseLength:操作结果集的大小, moved:表明本次update是否移动了硬盘上的数据,如果新记录比原记录短,通常不会移动当前记录,如果新记录比原记录长,那么可能会移动记录到其它位置,这时候会导致相关索引的更新.磁盘操作更多,加上索引更新,会使得这样的操作比较慢.(不过这个选在仅针对引擎是MMAPv1) |
4)查询Profile记录语句
- 查询执行时间大于200ms的Profile记录
1 | > db.system.profile.find( { millis : { $gt : 200 } } ) |
- 查询执行时间大于200ms的Profile记录:并根据millis排序(-1为降序,1为排序)
1 | > db.system.profile.find( { millis : { $gt : 200 } } ).sort({"millis":-1}) |
- 查看最近的10条记录
1 | >db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty() |
- 查看关于某个collection的相关慢查询操作
1 | >db.system.profile.find({ns:'mydb.table1'}).pretty() |
5)清除Profile慢日志并查看配置
1 2 3 | db.setProfilingLevel(0); db.system.profile.drop(); db.setProfilingLevel(1); |