摘要

上篇文章介绍了mapReduce这个聚合操作。本篇将继续学习,db有了,collection和document也有,基本上够用了,但是随着项目上线后,发现业务数据越来越多,查询效率越来越慢,这时就需要分析慢查询记录了。如何开启慢查询记录?就是本篇文章介绍的内容了。

相关文章

[MongoDB]入门操作

[MongoDB]增删改查

[MongoDB]count,gourp,distinct

[MongoDB]mapReduce

[MongoDB]索引

Profiling

首先添加测试数据,添加100w吧。

插入时间比较长,你可以通过服务端,查看日志

时间比较久,就插入这么多吧,能说明问题就行

首先需要分析是否需要建立索引,之前的版本可以通过expalin函数进行查看,不过当前使用的版本,通过该函数给出的结果是下面的情况。通过下图的indexFilterSet只能看到没有使用索引,其他的信息并不能帮到我们。

下面这张是@一线码农 园友的图片 可以对比一下 原文:http://www.cnblogs.com/huangxincheng/archive/2012/02/29/2372699.html

不过还有另外的一种方式,通过Profiling ,可以在服务端启动的时候加上该参数,–profile=级别。

也可以通过客户端db.setProfilingLevel(级别) 命令来实时配置。可以通过db.getProfilingLevel()命令来获取当前的Profile级别。

level有三种级别

0 – 不开启

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

  2 – 记录所有命令

参数为1的时候,默认的慢命令是大于100ms,当然也可以进行设置

 db.setProfilingLevel( level , slowms )
  db.setProfilingLevel( 1 , 120 );

Mongodb Profile 记录是直接存在系统db里的,记录位置 system.profile ,我们只要查询这个Collection的记录就可以获取到我们的 Profile 记录了。

执行查询,然后执行profile

> db.users.find({"name":"wolfy"+66666})
{ "_id" : ObjectId("5752486fc74b6bdc94876d95"), "name" : "wolfy66666", "age" : 13471 }
> db.system.profile.find()

分析结果

{
"op": "query",
"ns": "test.system.profile",
"query": {
"find": "system.profile",
"filter": { }
},
"keysExamined": 0,
"docsExamined": 0,
"cursorExhausted": true,
"keyUpdates": 0,
"writeConflicts": 0,
"numYield": 0,
"locks": {
"Global": {
"acquireCount": {
"r": NumberLong(2)
}
},
"Database": {
"acquireCount": {
"r": NumberLong(1)
}
},
"Collection": {
"acquireCount": {
"r": NumberLong(1)
}
}
},
"nreturned": 0,
"responseLength": 110,
"protocol": "op_command",
"millis": 0,
"execStats": {
"stage": "COLLSCAN",
"filter": {
"$and": [ ]
},
"nReturned": 0,
"executionTimeMillisEstimate": 0,
"works": 2,
"advanced": 0,
"needTime": 1,
"needYield": 0,
"saveState": 0,
"restoreState": 0,
"isEOF": 1,
"invalidates": 0,
"direction": "forward",
"docsExamined": 0
},
"ts": ISODate("2016-06-04T03:56:35.706Z"),
"client": "127.0.0.1",
"allUsers": [ ],
"user": ""
}{
"op": "query",
"ns": "test.users",
"query": {
"find": "users",
"filter": {
"name": "wolfy66666"
}
},
"keysExamined": 0,
"docsExamined": 866283,
"cursorExhausted": true,
"keyUpdates": 0,
"writeConflicts": 0,
"numYield": 6767,
"locks": {
"Global": {
"acquireCount": {
"r": NumberLong(13536)
}
},
"Database": {
"acquireCount": {
"r": NumberLong(6768)
}
},
"Collection": {
"acquireCount": {
"r": NumberLong(6768)
}
}
},
"nreturned": 1,
"responseLength": 160,
"protocol": "op_command",
"millis": 339,
"execStats": {
"stage": "COLLSCAN",
"filter": {
"name": {
"$eq": "wolfy66666"
}
},
"nReturned": 1,
"executionTimeMillisEstimate": 310,
"works": 866285,
"advanced": 1,
"needTime": 866283,
"needYield": 0,
"saveState": 6767,
"restoreState": 6767,
"isEOF": 1,
"invalidates": 0,
"direction": "forward",
"docsExamined": 866283
},
"ts": ISODate("2016-06-04T03:57:10.206Z"),
"client": "127.0.0.1",
"allUsers": [ ],
"user": ""
}

通过下面的命令可以查看最新的记录

db.system.profile.find().sort({$natural:-1})

还有一种更简洁的查看方式

show profile

该命令可以查看最近的5条记录

profile提供的信息内容解释

ts:该命令在何时执行。

millis:执行耗时,以毫秒为单位。

op:什么操作。

query:设置的查询条件。

nReturned:返回的条数。

docsExamined:文档扫描条数。

总结

上面列举了profile的使用方法,以及常用的几个分析结果进行解释。感兴趣的可以使用增删改查练练手,尝试一下。

[MongoDB]Profiling性能分析的更多相关文章

  1. MySQL之profiling性能分析(在5.6.14版本被丢弃)

    官方建议使用information_schema.profiling. 原因是show profile 输出了查询执行的每个步骤及其花费的时间,但是结果很难快速确定哪个步骤花费的时间最多,因为输出是按 ...

  2. Mysql内置的profiling性能分析工具

    要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 M ...

  3. Mysql优化_内置profiling性能分析工具

    如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK.一般的企业一般是DBA数据库工程师从监控里找到问题.DBA会告诉我们让我们来排查问题,那么可能很多种 ...

  4. Mysql自带profiling性能分析工具使用分享

    1. show variables like '%profiling%';(查看profiling信息)       2. set profiling=1;(开启profiling)   3. 执行S ...

  5. mongodb .explain('executionStats') 查询性能分析(转)

    mongodb性能分析方法:explain() 为了演示的效果,我们先来创建一个有200万个文档的记录.(我自己的电脑耗了15分钟左右插入完成.如果你想插更多的文档也没问题,只要有耐心等就可以了.) ...

  6. 玩转mongodb(五):mongodb 3.0+ 查询性能分析

    mongodb性能分析方法:explain() 为了演示的效果,我们先来创建一个有200万个文档的记录.(我自己的电脑耗了15分钟左右插入完成.如果你想插更多的文档也没问题,只要有耐心等就可以了.) ...

  7. mysql性能分析-------profiling和explain

    1. profiling之性能分析 MySQL5.0.37版本以上支持了Profiling – 官方手册.此工具可用来查询 SQL 会执行多少时间,System lock和Table lock 花多少 ...

  8. 性能分析之profiling及火焰图

    profiling 是一项非常重要的,但又对很多程序员陌生的技术,它尤其对性能调优有显著帮助.本文以Brendan对perf的介绍稍加引入[底层涉及了太多细节,目前仅关心如何用它对服务器应用进行use ...

  9. MiniProfiler性能分析工具— .Net Core中用法

    前言: 在日常开发中,应用程序的性能是我们需要关注的一个重点问题.当然我们有很多工具来分析程序性能:如:Zipkin等:但这些过于复杂,需要单独搭建. MiniProfiler就是一款简单,但功能强大 ...

随机推荐

  1. linux远程登陆其他主机并执行命令的若干方式

    一.命令行登陆 ssh后,一定后边加双引号 写命令,否则命令实在本地执行的,多条命令的话用双引号隔开, ssh user@remoteNode "cd /home ; ls" 二. ...

  2. wpf配置菜单栏

    WPF 内建了两种菜单——Menu 和ContextMenu(上下文菜单). 1. Menu Menu 的项可以是任何东西,但是你应该使用MenuItem 以及Separator 对象. <Me ...

  3. poj3696 快速幂的优化+欧拉函数+gcd的优化+互质

    这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...

  4. Java Attach API

    catalog . instrucment与Attach API . BTrace: VM Attach的两种方式 . Sun JVM Attach API 1. instrucment与Attach ...

  5. bos启动56898服务器配置界面报错

    //文件路径 /easweb/runtime/server/deploy/portal.ear/portal.war/WEB-INF/config/spring/applicationContext- ...

  6. HDU 1007 Quoit Design

    传送门 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  7. ubuntu 设置hostname

    永久修改hostname: # sudo vim /etc/hostname # sudo vim /etc/hosts

  8. BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊

    传送门 Link-Cut-Tree套路题 //BZOJ 2002 //by Cydiater //2016.9.12 #include <iostream> #include <cs ...

  9. java编程思想-java IO系统

    一.输入和输出 编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象."流"屏蔽了实际的I/O设备中处理数据的细节. J ...

  10. HTML1

    1.  前端:html:做网页的内容 CSS: 做网页的外观 JS:执行网页的动作 前端是静态网页,内容写死.要有变化的内容,需要数据库 浏览器去解析生成漂亮的界面 后台技术:.Net C# 数据库: ...