Mongodb慢查询笔记 (Mongodb slow query log)
-- ===========================
-- 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)的更多相关文章
- MySQL:动态开启慢查询日志(Slow Query Log)
前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 ...
- mysql中slow query log慢日志查询分析
在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...
- mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用
mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...
- MySQL 慢查询日志(Slow Query Log)
同大多数关系型数据库一样.日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件.通常包含错误日志文件,二进制日志,通用日志.慢查询日志.等等.这些日志能够帮助我们定位mysqld内 ...
- Mysql slow query log
一.概念部分: 顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设--log-slow-queries[=file_name]来打开该功能并设置记录 ...
- MySQL专题 2 数据库优化 Slow Query log
MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录 mysqld 的 ...
- MySQL四种类型日志:Error Log、General Query Log、Binary Log、Slow Query Log
MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录mysqld的一些 ...
- mongodb慢查询记录
在 MySQL中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是Mongo Database Profiler.不仅有,而且还有一些比MySQL ...
- mongoDB 高级查询语法
http://www.cnblogs.com/ITAres/articles/2084794.html本文参考自官方的手册:http://www.mongodb.org/display/DOCS/Ad ...
随机推荐
- Rails 确认params的统一方法
创建: 2017/11/06 Gemfile ### デバッグ出力の整形 gem 'awesome_print', :group => [:development, :test] a ...
- VBScript+SCR+NetApi+Accoreconsole 批处理dwg文件
继上次powershell运行accoreconsole(https://www.cnblogs.com/NanShengBlogs/p/10981687.html)的研究之后又觉得不是很合适,毕竟p ...
- thinkphp 5 常用的助手函数
load_trait:快速导入Traits,PHP5.5以上无需调用 /** * 快速导入Traits PHP5.5以上无需调用 * @param string $class t ...
- 279 Perfect Squares 完美平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...) 使得他们的和等于 n.你需要让平方数的个数最少.比如 n = 12,返回 3 ,因为 12 = 4 + 4 + 4 : ...
- error: no such device : 76de62ec-ac60-4c4d-bb Entering rescue mode .. grub resuce>(系统硬盘驱动器MBR已损坏)问题解决办法(图文详解)
问题详情 近期,由于博主我,担任实验室整个大数据集群的leader,突然的断电给整个集群造成,如下的情况问题.(欲哭无泪,我的各种服务啊) 解决办法 第一种方法:尝试,直接重启机器(我这里是台式机 ...
- Java 8 (2) 使用Lambda表达式
什么是Lambda? 可以把Lambda表达式理解为 简洁的表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. 使用Lambda可以让你更 ...
- [ NOI 2002 ] Robot
\(\\\) Description \(\\\) Solution 垃圾语文题毁我青春 这题其实就是重定义了俩函数.... 首先 \(\varphi(1)=0\) . 然后 \(2\) 在计算 \( ...
- [ Luogu 3927 ] Factorial
\(\\\) \(Description\) 求 \(N!\) 在 \(K\) 进制表示下末尾 \(0\) 的个数. \(N,K\in [1,10^{12}]\) \(\\\) \(Solution\ ...
- Python学习日记之文件读取操作
Python内置了文件读写的函数open,read 用法示例: open('/home/root/files.txt ') 在打开文件后,操作完成后可以使用close()关闭文件,但比较好的文件读写方 ...
- Ubantu下 docker的安装
另一种方法 1.切换到root权限或者用sudo 2.升级source列表并保证https和ca证书成功安装 # apt-get update # apt-get install apt-transp ...