mongodb 跟踪SQL语句及慢查询收集
有个需求:跟踪mongodb的SQL语句及慢查询收集
第一步:通过mongodb自带函数可以查看在一段时间内DML语句的运行次数。
在bin目录下面运行 ./mongostat -port 端口号 则可以看到下面的数据
它的输出有以下几列:
- inserts/s 每秒插入次数
- query/s 每秒查询次数
- update/s 每秒更新次数
- delete/s 每秒删除次数
- getmore/s 每秒执行getmore次数
- command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
- flushs/s 每秒执行fsync将数据写入硬盘的次数。
- mapped/s 所有的被mmap的数据量,单位是MB,
- vsize 虚拟内存使用量,单位MB
- res 物理内存使用量,单位MB
- faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
- locked % 被锁的时间百分比,尽量控制在50%以下吧
- idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了
- q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
- conn 当前连接数
- time 时间戳
上面只是大体的查看,并没有跟踪到SQL语句。下面开启慢查询
在mongodb客户端运行
db.getProfilingLevel()
以取0,1,2 三个值,他们表示的意义如下:
0 – 不开启
1 – 记录慢命令 (默认为>100ms)
2 – 记录所有命令
更改此值的方法是:假如更改成2
db.setProfilingLevel(2)
Profile 记录在级别1时会记录慢命令,那么这个慢的定义是什么?上面我们说到其默认为100ms,当然有默认就有设置,其设置方法和级别一样有两种,一种是通过添加–slowms启动参数配置。第二种是调用db.setProfilingLevel时加上第二个参数:
db.setProfilingLevel( level , slowms )
db.setProfilingLevel( 1 , 10 );
Mongo Profile 记录是直接存在系统db里的,记录位置 system.profile ,所以,我们只要查询这个Collection的记录就可以获取到我们的 Profile 记录了。
db.system.profile.find()
{"ts" : "Thu Jan 29 2009 15:19:32 GMT-0500 (EST)" , "info" : "query test.$cmd ntoreturn:1 reslen:66 nscanned:0
query: { profile: 2 } nreturned:1 bytes:50" , "millis" : 0}
db.system.profile.find( { info: /test.foo/ } )
{"ts" : "Thu Jan 29 2009 15:19:40 GMT-0500 (EST)" , "info" : "insert test.foo" , "millis" : 0}
{"ts" : "Thu Jan 29 2009 15:19:42 GMT-0500 (EST)" , "info" : "insert test.foo" , "millis" : 0}
{"ts" : "Thu Jan 29 2009 15:19:45 GMT-0500 (EST)" , "info" : "query test.foo ntoreturn:0 reslen:102 nscanned:2
query: {} nreturned:2 bytes:86" , "millis" : 0}
查看最新的 Profile 记录:
db.system.profile.find().sort({$natural:-1})
Profile 信息内容详解:ts-该命令在何时执行.millis Time-该命令执行耗时,以毫秒记.info-本命令的详细信息.query-表明这是一个query查询操作.
ntoreturn-本次查询客户端要求返回的记录数.比如, findOne()命令执行时 ntoreturn 为 1.有limit(n) 条件时ntoreturn为n.query-具体的查询条件(如x>3).nscanned-本次查询扫描的记录数.reslen-返回结果集的大小.nreturned-本次查询实际返回的结果集.
update-表明这是一个update更新操作.
fastmod-Indicates a fast modify operation. See Updates. These operations are normally quite fast.fastmodinsert – indicates a fast modify operation that performed an upsert.upsert-表明update的upsert参数为true.此参数的功能是如果update的记录不存在,则用update的条件insert一条记录.moved-表明本次update是否移动了硬盘上的数据,如果新记录比原记录短,通常不会移动当前记录,如果新记录比原记录长,那么可能会移动记录到其它位置,这时候会导致相关索引的更新.磁盘操作更多,加上索引更新,会使得这样的操作比较慢.
insert-这是一个insert插入操作.getmore-这是一个getmore 操作,getmore通常发生在结果集比较大的查询时,第一个query返回了部分结果,后续的结果是通过getmore来获取的。
如果只查看query的筛选方法如下:
db.system.profile.find({"op":"query"})
转载于:https://www.cnblogs.com/liqing1009/p/8666579.html
mongodb 跟踪SQL语句及慢查询收集相关推荐
- ef mysql跟踪sql语句_EF Core 日志跟踪sql语句
EF Core 日志跟踪sql语句 1.新增自定义ILoggerProvider实现类 public class EFLoggerProvider : ILoggerProvider { public ...
- oracle 10046事件查看,使用oracle的10046事件跟踪SQL语句
使用oracle的10046事件跟踪SQL语句 我们在分析应用程序性能问题的时候,更多地需要关注其中SQL语句 的执行情况,因为通常应用程序的性能瓶颈会在数据库这边,因此数据库的sql语句是我们优化的 ...
- 【转】在SQL Server中通过SQL语句实现分页查询
在SQL Server中通过SQL语句实现分页查询 2008年01月06日 星期日 12:28 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY ...
- sql语句提高数据库查询效率
可以通过以下多个方面优化sql语句提高数据库查询效率 1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2. 应尽量避免在 where 子 ...
- 在JDBC中实现SQL语句的模糊查询
在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...
- SQL语句多表查询:【多表连查】和【子查询】
SQL语句多表查询:[多表连查]和[子查询] 说明:insert.update.delete只针对[一张表]执行操作. 说明:select可以查询一张表.也可以查询多张表. 说明:多表查询分为:[多表 ...
- mysql语句统计总数_一条sql语句实现统计查询_MySQL
bitsCN.com 一条sql语句实现统计查询 如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) ...
- mysql查询数量语句_mysql语句统计总数_一条sql语句实现统计查询_MySQL
bitsCN.com 一条sql语句实现统计查询 如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) ...
- SQL语句之分组查询--GROUP BY(group by)
SQL语句之分组查询–GROUP BY(group by) 语法 select 聚合函数,列(要求出现在group by的后面)from 表where 筛选条件group by 分组的列表order ...
最新文章
- C语言中的union
- Java 14 可能带来什么新特性?
- 【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )
- os和sys模块的常用方法
- java jsp失效问题--待解决
- 动态规划 BZOJ1584 [Usaco2009 Mar] Cleaning Up 打扫卫生
- 北京第一个公共云计算平台即将诞生
- UIView的旋转iOS开发
- 忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!
- 将Java EE单体应用打造成微服务
- 在windows下把txt文件改为utf8格式
- iOS:面试八大陷阱
- 购物车html js代码,js实现购物车功能
- JAVASSM框架面试题
- bootstrap表单样式
- 计算机图形学上机心得,计算机图形学学习的心得体会
- <<道 德 经>>------老子
- apng java,免费的APNG、WebP格式转换工具-iSparta
- Vue-常用加密(MD5,DES,SHA256,BASE64,SHA1,RSA)
- RabbitMQ详解以及spring对RabbitMQ的集成(附带部分源码解读)