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 ...
随机推荐
- Python基础 — Pandas
Pandas -- 简介 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas ...
- bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名【bitset+Floyd传递闭包】
把关系变成有向边,稍微想一下就是要求在有向图中不能到达的点对个数,这个可以用Floyd传递闭包来做,但是n^3的复杂度跑不了1000 考虑bitset优化! 因为传递过程只会出现0和1,用bitset ...
- 使用docsify并定制以使它更强大
背景 经常在网上看到一些排版非常漂亮的技术手册,左边有目录栏,右边是Markdown格式的文档,整个配色都十分舒服,就像一本书一样,一看就很让人喜欢.就比如Markdown Preview Enhan ...
- 指向“”的 script 加载失败
今天遇到了一个非常奇怪的问题:在某个同时的电脑上,所有浏览器无法打开某个页面,F12查看控制台,发现有一个黄色的 指向“xxxx.js”的 <script> 加载失败 的提示.该外部js文 ...
- 洛谷 P1582 倒水
题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒 ...
- HDU 5514 欧拉函数应用
前置技能: <=i且与i互质的数的和是phi(i)*i/2 思路: 显然每个人的步数是gcd(a[i],m) 把m的所有因数预处理出来 1~m-1中的每个数 只会被gcd(m,i)筛掉一遍 // ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Minimum Distance in a Star Graph
In this problem, we will define a graph called star graph, and the question is to find the minimum d ...
- 洛谷 P2090 数字对
发现如果给定两个数(a,b),可以用类似辗转相除法在logn的时间内计算出(反向)变到(1,1)的最小步数. 然而并不知道另一个数是多少? 暴力嘛,枚举一下另一个数,反正1000000的nlogn不虚 ...
- J - Ananagrams(map+vector)
Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...
- 数据传递-------ajaxJson------spring3mvc中使用ajax传json中文乱码解决
参考来源:http://blog.csdn.net/dangerous_fire/article/details/25904225 第一种解决方法,适用所有情况 因为在controller中返回jso ...