mongodb--Profiling慢查询详解
官方查询地址: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
- operationProfiling:
- slowOpThresholdMs: 100
- 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
- db.setProfilingLevel(0)
- db.system.profile.drop()
- db.createCollection( "system.profile", { capped: true, size:4000000 } )
- db.setProfilingLevel(1)
--------------------- 本文来自 random-walk 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/asdfsadfasdfsa/article/details/65633588?utm_source=copy
mongodb--Profiling慢查询详解的更多相关文章
- ElasticSearch第四步-查询详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- Solr安装入门、查询详解
Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...
- ThinkPHP视图查询详解
ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm 这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下 ThinkP ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...
- (转)Mysql 多表查询详解
MySQL 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...
- 分享知识-快乐自己:Hibernate 中Criteria Query查询详解
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...
- Mysql高手系列 - 第12篇:子查询详解
这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语 ...
- MongoDB执行计划分析详解
要保证数据库处于高效.稳定的状态,除了良好的硬件基础.高效高可用的数据库架构.贴合业务的数据模型之外,高效的查询语句也是不可少的.那么,如何查看并判断我们的执行计划呢?我们今天就来谈论下MongoDB ...
- mongodb对数组中的元素进行查询详解
原文链接:http://blog.csdn.net/renfufei/article/details/78320176 MongoDB中根据数组子元素进行匹配,有两种方式. 使用 “[数组名].[子元 ...
随机推荐
- 20165214 实验三 敏捷开发与XP实践
一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱文远 学号:20165214 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时间:15:35 - 17:15 实验序号:三 ...
- PHP中session_start 函数详解使用方法
一.官方 session_status() 返回值为: PHP_SESSION_DISABLED 会话是被禁用的. PHP_SESSION_NONE 会话是启用的,但不存在当前会话. PHP_SESS ...
- 使用lets encrypt获取免费ssl证书
lets encrypt也是一个CA,并且在众多大厂的加持下有可能成为最棒的免费颁发证书的CA,尤其是chrome的加入. 目前https已经成为了一种趋势,无奈证书授权费用相当昂贵,将一大批企业挡在 ...
- 正则表达式的lastIndex属性
js中正则表达式的使用方式有两种,一种是正则表达式对象的方法,一种是字符串对象的方法,前者有exec(str).test(str)两个方法,后者有match(regexp).replace(regex ...
- Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制
文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...
- IPFS的配置安装
目录 1. IPFS简介 2. IPFS本地环境安装 2.1 下载ipfs压缩包 2.2 安装 3. 项目配置 3.1 创建ipfs节点 3.2 修改节点默认存储空间 3.3 查看节点id 3.4 启 ...
- getAttribLocation的返回值
var coord = gl.getAttribLocation(shaderProgram, "coordinates"); // 0 var coord2 = gl.ge ...
- 【论文 PPT】 【转】Human-level control through deep reinforcement learning(DQN)
最近在学习强化学习的东西,在网上发现了一个关于DQN讲解的PPT,感觉很是不错,这里做下记录,具体出处不详. ============================================= ...
- 复杂的动态布尔表达式性能评估(1)--Antlr4实现
前言: 规则引擎中, 往往涉及到多个条件构成了复杂布尔表达式的计算. 对于这类布尔表达式, 一是动态可变的(取决于运营人员的设定), 二是其表达式往往很复杂. 如何快速的计算其表达式的值, 该系列文章 ...
- verilog实现rgb2gray
前言 项目算法需求,需要将RGB彩色图像转换为灰度图像,算法原理是很简单的,但是对于刚接触FPGA的宝宝来说,进行时序的设计和调试还是不那么容易的,为了省事儿,就按照上一篇中值滤波(http://ww ...