MongoDB数据库查看慢查询级别以及慢查询日志

 更新时间:2023年05月24日 10:55:23   作者:阿福Chris  
最近项目上一直在用mongodb作为数据库,mongodb有他的优势,文档型类json格式存储数据,修改起来更方便,但是最近在用mongodb出现了查询缓慢的问题,这篇文章主要给大家介绍了关于MongoDB数据库查看慢查询级别以及慢查询日志的相关资料,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1. MongoDB 慢查询记录功能简介

如何定位 MongoDB 数据库的慢查询,我想应该是很多刚使用 MongoDB 数据库的朋友最想知道的问题。通过慢查询的定位,可以辅助对 MongoDB 中的 collection 进行优化。

MongoDB 数据库的慢查询数据其实存放在一个数据库集合 ( collection ) 中(system.profile),如果你不主动创建 system.profile 这个集合,那这个集合就固定1M大小,当慢查询记录超过1M,就会将历史数据覆盖,循环使用,所以在这里需要根据业务实际情况设置集合大小。

在 MongoDB 中慢查询功能(Profiling)设置有三个级别,分别代表如下含义:

  • 0:代表关闭,不收集任何慢查询
  • 1:收集慢查询数据,默认收集超过100毫秒的慢查询
  • 2:收集任何操作记录数据

可以通过在 MongoDB 中执行如下命令查看当前数据库的配置,需要特别注意的是,如果你在某一数据库中调整了该设置,那么该操作只对该数据库有效,其他数据库仍需要单独设置:

use test
'switched to db test'
db.getProfilingStatus()
{ was: 1, slowms: 1000, sampleRate: 1, ok: 1 }

2. 如何设置慢查询

2.1 检查慢查询是否开启

执行 db.getProfilingStatus() 查询数据库,返回结果是 was: 0 代表 MongoDB 没有开启慢查询功能;对应的如果不是 0 则表示开启了慢查询监控功能。

2.2 开启慢查询功能

如果你想指定监控慢查询在某一毫秒值之上的查询,例如超过 1000 毫秒的查询被记录,可以通过如下语句进行设置:

db.setProfilingLevel(1, {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> slowms: 1000 })

下面这个例子表示将慢查询的级别设置为 2

db.setProfilingLevel(2)
{ was: 1, slowms: 500, sampleRate: 1, ok: 1 }
db.getProfilingStatus()
{ was: 2, slowms: 500, sampleRate: 1, ok: 1 }

关掉慢查询功能

db.setProfilingLevel(0)

3. 如何查询慢查询日志

假设上面我们已经开启了慢查询监控功能,那在数据库使用过程中,会将 1000 ms 以上的执行查询进行记录,下面我们来看一下如何查询这些慢查询。

3.1 慢查询日志查看

查询最近的 10 个慢查询日志 (运行时间大于等于 8000 毫秒)

db.system.profile.find({"millis":{$gte:8000}}).limit(10).sort( { ts : -1 } ).pretty()

查询大于 100 秒的日志

db.system.profile.find( { millis : { $gt : 100000 } } ).pretty()

查询时间从 2023-01-03 15 点整到 2023-01-03 15点30分 之间的日志

db.system.profile.find({ts : {$gt: new ISODate("2023-01-03T07:00:00Z"),$lt: new ISODate("2023-01-03T07:30:00Z")}}).pretty()

备注:注意 Mongo 里面存储的 ISO 时间是格林尼治时间,我们当前CST时间为北京时间,需要在 ISO 上 +8,所以你可以看到上面我查询输入的时间为 7 点,但实际上查询的是 15 点的数据。

补充:mongodb慢查询了怎么办

如果你的 MongoDB 数据库中出现了慢查询,你可以尝试以下几种方法来解决问题:

找出导致慢查询的原因:

使用 MongoDB 的 explain() 方法来分析查询的执行计划,找出导致慢查询的原因。

启用 MongoDB 的慢查询日志功能,记录慢查询的详细信息,并分析日志中出现的问题。

优化查询:

尽量使用索引来优化查询,避免使用全表扫描。

尽量减少查询中的返回字段数量,只返回必要的字段。

使用合适的查询方式,例如使用 $in 代替 OR 运算符。

优化数据库结构:

对于频繁查询的字段,尽量使用索引。

合理划分分片,避免数据倾斜。

合理设置集合的副本数量,保证数据的可用性。

扩展硬件资源:

如果数据库的硬件资源限制了查询性能,可以考虑增加 CPU、内存或磁盘空间等资源。

总结

到此这篇关于MongoDB数据库查看慢查询级别以及慢查询日志的文章就介绍到这了,更多相关MongoDB查看慢查询内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 详解MongoDB范围片键和哈希片键

    详解MongoDB范围片键和哈希片键

    这篇文章主要介绍了MongoDB范围片键和哈希片键的相关资料,帮助大家更好的理解和学习使用MongoDB,感兴趣的朋友可以了解下
    2021-03-03
  • mongodb root用户创建数据库提示not master的解决

    mongodb root用户创建数据库提示not master的解决

    这篇文章主要介绍了mongodb root用户创建数据库提示not master的解决方案,具有很好的参考价值,希望对大家有所帮助。
    2023-02-02
  • MongoDB如何查询耗时记录的方法详解

    MongoDB如何查询耗时记录的方法详解

    查询操作是我们日常操作数据库经常会遇到的一个功能,下面这篇文章主要给大家介绍了关于MongoDB如何查询耗时记录的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • MongoDB?Shell常用基本操作命令详解

    MongoDB?Shell常用基本操作命令详解

    这篇文章主要为大家介绍了MongoDB?Shell常用基本操作命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • MongoDB CRUD操作中的插入实例教程

    MongoDB CRUD操作中的插入实例教程

    这篇文章主要给大家介绍了关于MongoDB CRUD操作中的插入的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • 【MongoDB for Java】Java操作MongoDB数据库

    【MongoDB for Java】Java操作MongoDB数据库

    本篇文章现在我们就用Java来操作MongoDB的数据。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 一次线上mongo慢查询问题排查处理记录

    一次线上mongo慢查询问题排查处理记录

    这篇文章主要给大家介绍了一次线上mongo慢查询问题排查处理的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • mongodb的安装和开机自启动详细讲解

    mongodb的安装和开机自启动详细讲解

    这篇文章主要介绍了mongodb的安装和开机自启动详细讲解,,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • NoSQL优缺点与MongoDB数据库简介

    NoSQL优缺点与MongoDB数据库简介

    这篇文章介绍了NoSQL的优缺点与MongoDB数据库,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下
    2016-02-02

最新评论

?


http://www.vxiaotou.com