【MongoDB】MongoDB之优化器Profiler

标签: mongodb mongodb 优化 | 发表时间:2014-12-09 08:03 | 作者:sxb0841901116
出处:http://blog.csdn.net

在mysql数据库中,慢查询日志经常作为优化数据库的依据, mongodb中依然有类似的功能。Mongodb自带的profiler,可以方便地记录所有耗时的操作,以便于调优;

一、开始profiler功能

开启profier功能有两种:

第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别

第二种就是在客户端执行“db.setProfilingLevel(级别)”命令

profiler信息保存在system.profile表中,可以通过执行“db.getProfilingLevel()”命令来获取当前profiler级别来:




在上图可以看到,level总共有三个参数,0是关闭,1是慢查询,2是所有的。如果设置为2表示所有的语句都会记录到log中。慢查询的默认时间是100ms,当然也可以通过参数slowsms进行设置。

二、查询profiler记录

mysql慢查询日志是存储在磁盘上,而mongodb profiler记录直接存在系统的db中。记录到system.profile中。profile就是前面讲过的capped collection集合。所以只要查询这个collection的记录就可以获取profiler记录的日志,可以使用db.system.profile.find()的命令直接查找执行时间大于某一限度的(如5ms)的profiler日志;


开启设置为100ms

<pre name="code" class="html">> db.students.find({'comment.aihao':'reading'}).limit(1)
{ "_id" : ObjectId("5485c80bdf41c6670aa8d51c"), "name" : "albert", "age" : 12, "comment" : { "aihao" : [ "basket", "reading" ], "relatives" : [ "parent", "brother" ] } }
> db.system.profile.find().sort({$natural:-1}).limit(1)
{ "op" : "query", "ns" : "test.system.indexes", "query" : { "expireAfterSeconds" : { "$exists" : true } }, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 7, "nscannedObjects" : 7, "keyUpdates" : 0, "numYield" : 0, "lockStats" : { "timeLockedMicros" : { "r" : NumberLong(159), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(4), "w" : NumberLong(6) } }, "nreturned" : 0, "responseLength" : 20, "millis" : 0, "execStats" : { "type" : "COLLSCAN", "works" : 9, "yields" : 0, "unyields" : 0, "invalidates" : 0, "advanced" : 0, "needTime" : 8, "needFetch" : 0, "isEOF" : 1, "docsTested" : 7, "children" : [ ] }, "ts" : ISODate("2014-12-08T15:54:47.377Z"), "client" : "0.0.0.0", "allUsers" : [ { "user" : "__system", "db" : "local" } ], "user" : "__system@local" }


 

通过执行上面语句,可以看出在system.profile中记录了详细的查询信息。主要字段说明:

1: ts 命令在何时执行

2: info 命令的详细信息

3:reslen: 返回结果集的大小

4: nscanned:本次查询扫描的记录数

5: nreturned: 本次查询实际返回的结果集

6: mills:该命令的执行耗时(单位:毫秒)


可以利用命令查询特定条件的值:例如:查询执行时间大于4ms的查询语句:





作者:sxb0841901116 发表于2014-12-9 0:03:25 原文链接
阅读:271 评论:0 查看评论

相关 [mongodb mongodb 优化] 推荐:

【MongoDB】MongoDB之优化器Profiler

- - CSDN博客数据库推荐文章
在mysql数据库中,慢查询日志经常作为优化数据库的依据, mongodb中依然有类似的功能. Mongodb自带的profiler,可以方便地记录所有耗时的操作,以便于调优;. 一、开始profiler功能. 开启profier功能有两种:. 第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别.

MongoDB ObjectId的优化

- - NoSQLFan
ObjectID,也就是我们在进行insert操作时会自动生成的_id字段. 我们经常会看到它,这个字段的组成及其设计思路我们可以参考NoSQLFan之前的文章《 MongoDB文档(Document)全局唯一ID的设计思路》. 今天我们想讲一下对这个字段的一些优化,内容主要来源于 MongoDB官方文档.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.

Dex – MongoDB索引优化工具

- - NoSQLFan
Dex是一个开源的MongoDB 优化工具,它通过对查询日志和当前数据库索引进行分析,向管理员提出高效的索引优化策略. 在监控过程中,dex会通过stderr输出推荐的结果. 我们看到,在输出结果中,有一个shellCommand字段,里面就是添加索引的语句,如果你觉得dex的推荐不错,就可以直接复制这段脚本在 MongoDB上添加索引了.

MongoDB智能查询优化的问题

- - NoSQLFan
自动 查询优化是 MongoDB一个专门设计的功能. 简言之,这个功能就是通过对查询进行分析,从而判断出更有利的索引使用策略. 而这个智能的功能,实际潜伏着一些问题. 传统的查询优化是通过对语句进行语义分析来进行索引使用的预判,而MongoDB使用了一种更简单粗暴的方式,对查询的实际执行情况进行分析,它同时执行多条查询,每一条查询使用不同的索引,当其中一条返回时,终止其它的查询,并记录这次的结果,以后会优先使用返回更快的索引.

MongoDB范围查询的索引优化

- - NoSQLFan
我们知道, MongoDB的 索引是B-Tree结构的,和MySQL的索引非常类似. 所以你应该听过这样的建议:创建索引的时候要考虑到sort操作,尽量把sort操作要用到的字段放到你的索引后面. 但是有的情况下,这样做反而会使你的查询性能更低. 比如我们进行下面这样的查询:. 查询条件是 {“country”: “A”},按 carsOwned 字段的正序排序.

开发高性能的MongoDB应用—浅谈MongoDB性能优化 - 吴纹羽

- - 博客园_首页
大数据时代的数据存储,非关系型数据库MongoDB(一).   “如何能让软件拥有更高的性能. ”,我想这是一个大部分开发者都思考过的问题. 性能往往决定了一个软件的质量,如果你开发的是一个互联网产品,那么你的产品性能将更加受到考验,因为你面对的是广大的 互联网用户,他们可不是那么有耐心的. 严重点说,页面的加载速度每增加一秒也许都会使你失去一部分用户,也就是说, 加载速度和用户量是成反比的.

夜说mongodb

- Lianhui Wang - NoSQLFan
前两天本站刚刚分享了wordnik使用MongoDB经验的文章:《Wordnik 的 MongoDB 使用经历》,今天又看到一位朋友对这方面做的总结,分享在这里,供大家参考. 赋闲以后很长没有更新博客了,说忙完全是借口,多半因为没有兴致所致. 今天凌晨比赛多多,趁着比赛的前奏和间隙,遂浏览些技术文章.

MongoDB与内存

- 高春辉 - 火丁笔记
但凡初次接触MongoDB的人,无不惊讶于它对内存的贪得无厌,至于个中缘由,我先讲讲Linux是如何管理内存的,再说说MongoDB是如何使用内存的,答案自然就清楚了. 据说带着问题学习更有效,那就先看一个MongoDB服务器的top命令结果:. 这台MongoDB服务器有没有性能问题. 先讲讲Linux是如何管理内存的.