官方查询地址:https://docs.mongodb.com/v3.2/tutorial/manage-the-database-profiler/

在很多情况下,DBA都要对数据库的性能进行分析处理,找出降低性能的根源

而Mongo就有一种分析工具来检测并追踪影响性能的慢查询---Profile

有两种方式可以控制Profiling的开关和级别,

第一种是直接在启动参数中进行设置,如下:

如果想要全局开启Profiling,则可以在mongod启动时加上参数

mongod --profile 1 --slowms100         # 1表示追踪级别,100表示慢查询判定时间(ms)

如果是配置文件中开启的话,配置如下:
[javascript] view plain copy

  1. operationProfiling:
  2. slowOpThresholdMs: 100
  3. mode: slowOp

第二种是在mongo shell进行实时配置,命令如下:

> db.setProfilingLevel(1,200)          ---1表示level,200表示慢查询时间(ms),也可以省略时间设置

{ "was" : 1, "slowms" : 100, "ok" : 1 }     ---100表示之前的慢查询时间设定值

> db.getProfilingStatus()               ---查询当前慢查询的状态信息

{ "was" : 1, "slowms" : 200 }          ---was后的值表示级别

> db.getProfilingLevel()               ---只查询Profiling级别可用此命令

1

级别可以取0,1,2 三个值,他们表示的意义如下:

  0 – 不开启

  1 – 记录慢命令 (默认为>100ms)

  2 – 记录所有命令

Mongo Profile慢查询记录直接记录在db中,记录位置是当前开启Profile功能的库下的system.profile集合中,所以只需要直接查询这个集合就行

例:

查询执行时间大于200ms的Profile记录:

> db.system.profile.find( { millis : { $gt : 5 } } )

查看最近的10条记录

>db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()

查看关于某个collection的相关慢查询操作:

>db.system.profile.find({ns:'mydb.table1'}).pretty()

show profile命令

此命令查询执行时间超过1ms的最近5条记录

对于Profile的相关信息解释:

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)

MongoDB 查询优化

如果keysExamined (扫描索引建的记录数)远大于nreturned(返回结果的记录数)的话,那么我们就要考虑通过加索引来优化记录定位了。

responseLength 如果过大,那么说明我们返回的结果集太大了,可能会影响性能,这时请查看find函数的第二个参数是否只写上了你需要的属性名(限制于仅需要查询的字段)。(类似 于MySQL中不要总是select *)

对于创建索引的建议是:如果很少读,那么尽量不要添加索引,因为索引越多,写操作会越慢。如果读量很大,那么创建索引还是比较划算的。

Profiler 的效率

  Profiling 功能肯定是会影响效率的,但是不太严重,原因是他使用的是system.profile 来记录,而system.profile 是一个capped collection 这种collection 在操作上有一些限制和特点,但是效率更高

也可以对system.profile的size进行设置,具体设置如下:

[python] view plain copy

  1. db.setProfilingLevel(0)
  2. db.system.profile.drop()
  3. db.createCollection( "system.profile", { capped: true, size:4000000 } )
  4. db.setProfilingLevel(1)

--------------------- 本文来自 random-walk 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/asdfsadfasdfsa/article/details/65633588?utm_source=copy

mongodb--Profiling慢查询详解的更多相关文章

  1. ElasticSearch第四步-查询详解

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

  2. Solr安装入门、查询详解

    Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...

  3. ThinkPHP视图查询详解

    ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm   这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下     ThinkP ...

  4. MySQL简单查询详解-单表查询

    MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...

  5. Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)

    一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...

  6. (转)Mysql 多表查询详解

    MySQL 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...

  7. 分享知识-快乐自己:Hibernate 中Criteria Query查询详解

    1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...

  8. Mysql高手系列 - 第12篇:子查询详解

    这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语 ...

  9. MongoDB执行计划分析详解

    要保证数据库处于高效.稳定的状态,除了良好的硬件基础.高效高可用的数据库架构.贴合业务的数据模型之外,高效的查询语句也是不可少的.那么,如何查看并判断我们的执行计划呢?我们今天就来谈论下MongoDB ...

  10. mongodb对数组中的元素进行查询详解

    原文链接:http://blog.csdn.net/renfufei/article/details/78320176 MongoDB中根据数组子元素进行匹配,有两种方式. 使用 “[数组名].[子元 ...

随机推荐

  1. 20165214 实验三 敏捷开发与XP实践

    一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱文远 学号:20165214 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时间:15:35 - 17:15 实验序号:三 ...

  2. PHP中session_start 函数详解使用方法

    一.官方 session_status() 返回值为: PHP_SESSION_DISABLED 会话是被禁用的. PHP_SESSION_NONE 会话是启用的,但不存在当前会话. PHP_SESS ...

  3. 使用lets encrypt获取免费ssl证书

    lets encrypt也是一个CA,并且在众多大厂的加持下有可能成为最棒的免费颁发证书的CA,尤其是chrome的加入. 目前https已经成为了一种趋势,无奈证书授权费用相当昂贵,将一大批企业挡在 ...

  4. 正则表达式的lastIndex属性

    js中正则表达式的使用方式有两种,一种是正则表达式对象的方法,一种是字符串对象的方法,前者有exec(str).test(str)两个方法,后者有match(regexp).replace(regex ...

  5. Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制

    文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...

  6. IPFS的配置安装

    目录 1. IPFS简介 2. IPFS本地环境安装 2.1 下载ipfs压缩包 2.2 安装 3. 项目配置 3.1 创建ipfs节点 3.2 修改节点默认存储空间 3.3 查看节点id 3.4 启 ...

  7. getAttribLocation的返回值

    var coord = gl.getAttribLocation(shaderProgram, "coordinates");    // 0 var coord2 = gl.ge ...

  8. 【论文 PPT】 【转】Human-level control through deep reinforcement learning(DQN)

    最近在学习强化学习的东西,在网上发现了一个关于DQN讲解的PPT,感觉很是不错,这里做下记录,具体出处不详. ============================================= ...

  9. 复杂的动态布尔表达式性能评估(1)--Antlr4实现

    前言: 规则引擎中, 往往涉及到多个条件构成了复杂布尔表达式的计算. 对于这类布尔表达式, 一是动态可变的(取决于运营人员的设定), 二是其表达式往往很复杂. 如何快速的计算其表达式的值, 该系列文章 ...

  10. verilog实现rgb2gray

    前言 项目算法需求,需要将RGB彩色图像转换为灰度图像,算法原理是很简单的,但是对于刚接触FPGA的宝宝来说,进行时序的设计和调试还是不那么容易的,为了省事儿,就按照上一篇中值滤波(http://ww ...