-- ===========================
-- mongodb slow query log
-- ===========================

Reference: http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/

Profiling Levels:
1 resume
 0 - the profiler is off, does not collect any data.
 1 - collects profiling data for slow operations only. By default slow operations are those slower than 100 milliseconds.
  You can modify the threshold for “slow” operations with the slowms
runtime option or the setParameter command. See the Specify the
Threshold for Slow Operations section for more information.
 2 - collects profiling data for all database operations.

2 able
2.1
db.setProfilingLevel(1,500);
db.setProfilingLevel(2,500);
PRIMARY> db.setProfilingLevel(1,500);
{ "was" : 0, "slowms" : 500, "ok" : 1 }
PRIMARY>
PRIMARY>
PRIMARY>
PRIMARY> db.setProfilingLevel(1,500);
{ "was" : 1, "slowms" : 500, "ok" : 1 }
PRIMARY>
PRIMARY>
PRIMARY>
疑问:为什么需要set2次才能生效?
0代表关闭,1代表只记录slowlog,2代表记录所有操作,这里我们设置成了500,也就是500ms

2.2 check the status
PRIMARY> db.getProfilingStatus();
{ "was" : 2, "slowms" : 500 }
PRIMARY> db.getProfilingLevel();
PRIMARY>

2.3 see the last log info
db.system.profile.find().sort({$natural:-1}) 
PRIMARY> db.system.profile.find().sort({$natural:-1}) 
{ "ts" : ISODate("2013-05-14T08:13:37.098Z"), "op" : "insert", "ns" :
"test.tickets", "millis" : 0, "client" : "127.0.0.1", "user" : "" }
{ "ts" : ISODate("2013-05-14T08:13:37.098Z"), "op" : "insert", "ns" :
"test.tickets", "millis" : 0, "client" : "127.0.0.1", "user" : "" }
{ "ts" : ISODate("2013-05-14T08:13:37.098Z"), "op" : "insert", "ns" :
"test.tickets", "millis" : 0, "client" : "127.0.0.1", "user" : "" }
PRIMARY>
ts:时间戳
op: 操作类型
ns:执行操作的对象集合
millis:操作所花时间,毫秒
client: 执行操作的客户端
user: 执行操作的mongodb连接用户

2.4 可以在mongodb启动之初设置slow生效
直接加在启动命令中:mongod --profile=1 --slowms=15
或者在配置文件中写好 用-f强制加载配置文件启动mongodb
profile=1
slowms=1000
[] 在replicaset中,必须把一个个instance都生效才行。每一个都需要生效一次。

3 see the log
db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty();
db.system.profile.find().limit(10).sort( { ts : 1 } ).pretty();

4 Disable Profiling
To disable profiling, use the following helper in the mongo shell: set the default value 0;
db.setProfilingLevel(0)

5 当profile表过小时,调整表大小为4MB
db.setProfilingLevel(0)   -- profile失效
db.system.profile.drop()   -- 删除
db.createCollection( "system.profile", { capped: true, size:4000000 } )    -- 重建
db.setProfilingLevel(1)  -- profile生效

6 查看出来的慢mongo命令
6.1 显示最新的5条操作记录
show profile;

6.2 显示结果分析,查询大于5毫秒的slow command。
db.system.profile.find().sort({millis:-1}).limit(10);
db.system.profile.find( { millis : { $gt : 5 } } ).pretty();
{
        "ts" : ISODate("2013-01-16T18:26:18.041Z"),
        "op" : "query",  -- 执行类型
        "ns" : "ssodatabase.exchangetickets", -- 执行collection名称
        "query" : {
                "xid" : "X15e1481688254bc9a94701b3aa9e7abc627971358360754783"
        },  -- 执行的内容
        "ntoreturn" : 1,
        "nscanned" : 382793,
        "nreturned" : 1,
        "responseLength" : 605,
        "millis" : 5841, -- 执行的时间
        "client" : "10.100.10.161",  -- 执行的客户端
        "user" : "" -- 执行的mongo用户
}
观察结果中的"query"字段。  没有直接db.test.insert({xxxxxxx.....})这样显示的,需要你自己根据query字段去拼接取值.

7 返回特定时间的慢查询记录
7.1普通的时间短查询
db.system.profile.find(
                       {
                        ts : {
                              $gt : new ISODate("2013-05-09T03:00:00Z") ,
                              $lt : new ISODate("2013-05-17T03:40:00Z")
                             }
                       }
                      ).pretty();

run the command, follows:
       PRIMARY> db.system.profile.find(
...                        {
...                         ts : {
...                               $gt : new ISODate("2013-05-09T03:00:00Z") ,
...                               $lt : new ISODate("2013-05-17T03:40:00Z")
...                              }
...                        }
...                       ).pretty();

{
        "ts" : ISODate("2013-05-14T08:36:58.691Z"),
        "op" : "query",
        "ns" : "ssodatabase.digitalriverorderdetails",
        "query" : {
                "invoiceId" : "15539232823"
        },
        "ntoreturn" : 1,
        "nscanned" : 1,
        "nreturned" : 1,
        "responseLength" : 1213,
        "millis" : 663,
        "client" : "10.100.10.162",
        "user" : "admin"
}
{
        "ts" : ISODate("2013-05-14T09:17:58.911Z"),
        "op" : "insert",
        "ns" : "ssodatabase.tickets",
        "millis" : 527,
        "client" : "10.100.10.154",
        "user" : "admin"
}
{
        "ts" : ISODate("2013-05-14T09:20:58.648Z"),
        "op" : "insert",
        "ns" : "ssodatabase.tickets",
        "millis" : 529,
        "client" : "10.100.10.153",
        "user" : "admin"
}      
......

7.2 带执行时间倒序排序,并且只输出用户信息
db.system.profile.find(
                       {
                         ts : {
                               $gt : new ISODate("2013-05-09T03:00:00Z")  ,
                               $lt : new ISODate("2013-05-17T09:40:00Z")
                              }
                       },
                       { user : 1 } -- 只输出用户信息
                      ).sort( { millis : -1 } ) -- 倒序排序
 
PRIMARY> db.system.profile.find(
...                        {
...                          ts : {
...                                $gt : new ISODate("2013-05-09T03:00:00Z")  ,
...                                $lt : new ISODate("2013-05-17T09:40:00Z")
...                               }
...                        },
...                        { user : 1 }
...                       ).sort( { millis : -1 } )
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }
{ "user" : "admin" }

7.3 带执行时间倒序排序,并且只输出用户信息
db.system.profile.find(
                       {
                         ts : {
                               $gt : new ISODate("2013-05-09T03:00:00Z")  ,
                               $lt : new ISODate("2013-05-17T09:40:00Z")
                              }
                       }
                      ).sort( { millis : -1 } )  -- 倒序排序

url:http://blog.csdn.net/mchdba/article/details/8950632

Mongodb慢查询笔记 (Mongodb slow query log)的更多相关文章

  1. MySQL:动态开启慢查询日志(Slow Query Log)

    前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 ...

  2. mysql中slow query log慢日志查询分析

    在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...

  3. mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

    mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...

  4. MySQL 慢查询日志(Slow Query Log)

    同大多数关系型数据库一样.日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件.通常包含错误日志文件,二进制日志,通用日志.慢查询日志.等等.这些日志能够帮助我们定位mysqld内 ...

  5. Mysql slow query log

    一.概念部分:  顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设--log-slow-queries[=file_name]来打开该功能并设置记录 ...

  6. MySQL专题 2 数据库优化 Slow Query log

    MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录 mysqld 的 ...

  7. MySQL四种类型日志:Error Log、General Query Log、Binary Log、Slow Query Log

    MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录mysqld的一些 ...

  8. mongodb慢查询记录

    在 MySQL中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是Mongo Database Profiler.不仅有,而且还有一些比MySQL ...

  9. mongoDB 高级查询语法

    http://www.cnblogs.com/ITAres/articles/2084794.html本文参考自官方的手册:http://www.mongodb.org/display/DOCS/Ad ...

随机推荐

  1. E20171212-hm

    odd   adj. 古怪的; 奇数的; 剩余的; 临时的; odd number 奇数 even adj. 偶数的 even number 偶数

  2. (前缀和 内存分配)51NOD 1081 子段求和

    给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和.   例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 ...

  3. 2017杭电多校第六场03Inversion

    传送门 Inversion Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  4. ACM_18(同余)

    18 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一个简单的问题,大家应该有不少做过大数加法题吧.这个题的数据也是64位整数放 ...

  5. pycharm但多行注释快捷键

    pycharm中同时注释多行代码快捷键: 代码选中的条件下,同时按住 Ctrl+/,被选中行被注释,再次按下Ctrl+/,注释被取消

  6. 所有版本chrome、chromedriver、firefox下载链接

    1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是原版的就不得而知了. http://www.slimjet.com/ch ...

  7. SCRIPT70: 没有权限

    主要原因:iframe安全而引发的问题,浏览器中js是没有垮域访问的权限的.如果用到iframe首先确保不垮域,或者不用iframe以绕开这个问题. 另外在jquery的早期版本中如:jquery-1 ...

  8. hdu5122 K.Bro Sorting

    思路: 模拟. 实现: #include <iostream> #include <cstdio> using namespace std; ], n, t; int main ...

  9. CF804B Minimum number of steps

    思路: 找规律.参考了http://blog.csdn.net/harlow_cheng/article/details/71190999. 实现: #include <iostream> ...

  10. TensorFlow车牌识别实践(1)

    本文对公开的文章进行验证,从环境搭建到运行到结果分析. 1,文章:基于TensorFlow的车牌号识别系统 文章(译文) http://www.cnblogs.com/Jsmile2017/p/680 ...