我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mongodb慢查询分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mongodb慢查询分析

1.用慢查询日志(system.profile)找到超过500ms的语句 

mongos>db.setProfilingLevel(1,500)

2.然后再通过.explain()解析影响行数,分析为什么超过500ms【即看执行计划】 参见下文评论链接

3. 决定是否是缺失索引导致


#查看状态:级别和时间

PRIMARY> db.getProfilingStatus()

{ "was" : 1, "slowms" : 200 }

#查看级别

PRIMARY> db.getProfilingLevel()

1

#设置级别

PRIMARY> db.setProfilingLevel(2)

{ "was" : 1, "slowms" : 100, "ok" : 1 }

#设置级别和时间

PRIMARY> db.setProfilingLevel(1,200)

{ "was" : 2, "slowms" : 100, "ok" : 1 }

 Profiling级别说明

参数:

0:关闭,不收集任何数据。

1:收集慢查询数据,默认是100毫秒。

2:收集所有数据

注意:

  1  以上要操作要是在test集合下面的话,只对该集合里的操作有效,要是需要对整个实例有效,则需要在所有的集合下设置或则在开启的时候开启参数

  2 每次设置之后返回给你的结果是修改之前的状态(包括级别、时间参数)


2:不通过mongo shell


在mongoDB启动的时候


mongod --profile=1  --slowms=200


或则在配置文件里添加2行:

profile = 1

slowms = 200

3:关闭Profiling

# 关闭

PRIMARY> db.setProfilingLevel(0)

{ "was" : 1, "slowms" : 200, "ok" : 1 }


4:修改“慢查询日志”的大小

#关闭Profiling

PRIMARY> db.setProfilingLevel(0)

{ "was" : 0, "slowms" : 200, "ok" : 1 }

#删除system.profile集合

PRIMARY> db.system.profile.drop()


慢查询(system.profile)分析 


 3.2: 分析

如果发现 millis 值比较大,那么就需要作优化。

1  如果nscanned数很大,或者接近记录总数(文档数),那么可能没有用到索引查询,而是全表扫描。

2  如果 nscanned 值高于 nreturned 的值,说明数据库为了找到目标文档扫描了很多文档。这时可以考虑创建索引来提高效率。


‘type’的返回参数说明:


COLLSCAN  #全表扫描

IXSCAN  #索引扫描

FETCH  #根据索引去检索指定document

SHARD_MERGE  #将各个分片返回数据进行merge

SORT  #表明在内存中进行了排序(与老版本的scanAndOrder:true一致)

LIMIT  #使用limit限制返回数

SKIP  #使用skip进行跳过

IDHACK  #针对_id进行查询

SHARDING_FILTER #通过mongos #对分片数据进行查询

COUNT #利用db.coll.explain().count()之类进行count运算

COUNTSCAN #count不使用Index进行count时的stage返回

COUNT_SCAN #count使用了Index进行count时的stage返回

SUBPLA #未使用到索引的$or查询的stage返回

TEXT #使用全文索引进行查询时候的stage返回

PROJECTION #限定返回字段时候stage的返回


对于普通查询,我们最希望看到的组合有这些:

Fetch+IDHACK

Fetch+ixscan

Limit+(Fetch+ixscan)

PROJECTION+ixscan

SHARDING_FILTER+ixscan

不希望看到包含如下的type:


COLLSCAN(全表扫),SORT(使用sort但是无index),不合理的SKIP,SUBPLA(未用到index的$or)

对于count查询,希望看到的有:

COUNT_SCAN

不希望看到的有:

COUNTSCAN


4  性能(explain) 参考mongodb 官网链接 见下文评论

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mongodb慢查询分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis慢查询日志及慢查询分析详解

这篇文章主要为大家介绍了Redis慢查询日志及慢查询分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-28

MongoDB分页查询缓慢怎么办

目录1. 分页查询的常见方式及其问题2. 优化策略一:索引的有效利用3. 优化策略二:基于索引的游标分页4. 优化策略三:使用聚合框架5. 优化策略四:减少查询返回的数据量6. 优化策略五:使用缓存机制7. 优化策略六:异步处理与预加载8.
MongoDB分页查询缓慢怎么办
2024-09-08

MySQL慢查询如何分析

MySQL慢查询日志是分析数据库性能问题的重要工具。当MySQL执行一个查询语句时,如果该查询语句的执行时间超过了预设的阈值(默认为1秒),MySQL就会将其记录到慢查询日志中。通过分析慢查询日志,我们可以找出性能瓶颈,优化SQL语句,提高
MySQL慢查询如何分析
2024-10-20

mongodb分页查询太慢如何解决

要解决MongoDB分页查询太慢的问题,可以考虑以下几个方面的优化:1. 使用索引:确保查询的字段上创建了适当的索引,特别是分页查询中经常使用的字段。对于分页查询,常见的索引类型是单字段索引和复合索引。2. 优化查询语句:检查查询语句是否能
2023-08-23

MySQL慢查询日志分析

MySQL慢查询日志是MySQL服务器用来记录慢查询操作的一种日志打开慢查询日志功能:在MySQL配置文件(例如:my.cnf或my.ini)中,添加以下配置选项:slow_query_log = "1"slow_query_log_
MySQL慢查询日志分析
2024-10-20

MySQL的慢查询实例分析

这篇文章主要介绍“MySQL的慢查询实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL的慢查询实例分析”文章能帮助大家解决问题。1 概念MySQL的慢查询,全名是慢查询日志,是MySQ
2023-06-28

在Linux下开启mysql慢查询,分析查询语句

一,为什么要开启这个查询呢?数据库是很容易产生瓶颈的地方,现在Nosql大家讨论这么热,估计都被数据库搞郁闷了。mysql中最影响速度的就是那些查询非常慢的语句,这些慢的语句,可能是写的不够合理或者是大数据下多表的联合查询等等,所以我们要找
2022-05-26

Linux下MySQL的慢查询日志分析

MySQL的慢查询日志是记录MySQL执行时间超过指定阈值的查询语句的日志,在Linux下可以通过以下步骤来进行慢查询日志的分析:打开MySQL配置文件my.cnf,找到slow_query_log参数,将其设置为ON,并设置slow_qu
Linux下MySQL的慢查询日志分析
2024-08-16

编程热搜

目录