首页 > 数据库 >MongoDB 查看慢查询级别及慢查询日志

MongoDB 查看慢查询级别及慢查询日志

时间:2024-07-01 09:09:56浏览次数:19  
标签:profile MongoDB db system 查询 日志 及慢

  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 }
  1. 如何设置慢查询
    2.1 检查慢查询是否开启
    执行 db.getProfilingStatus() 查询数据库,返回结果是 was: 0 代表 MongoDB 没有开启慢查询功能;对应的如果不是 0 则表示开启了慢查询监控功能。

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

db.setProfilingLevel(1, {
    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 点的数据。

清理慢查询日志,设置大小

db.setProfilingLevel(0)
db.system.profile.drop()
db.createCollection( "system.profile", { capped: true, size: 1024*1024*10 } )
db.setProfilingLevel(1, { slowms: 5000 })

explain 使用

db.BotUserLog9.explain("executionStats").aggregate( [    { $group: { _id: "date", count: { "$sum": 1 } } } ])

标签:profile,MongoDB,db,system,查询,日志,及慢
From: https://www.cnblogs.com/abowu/p/18277372

相关文章

  • MySQL 索引之外的相关查询优化总结
    在这之前先说明几个概念:1、驱动表和被驱动表:驱动表是主表,被驱动表是从表、非驱动表。驱动表和被驱动表并非根据from后面表名的先后顺序而确定,而是根据explain语句查询得到的顺序确定;展示在前面的是驱动表,后面的是非驱动表。2、关联查询的类型非为:内连接(innerjoin)、......
  • 数据库查询总结
     select语句SELECT语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。select语句语法格式SELECT[ALL|DISTINCT]输出表达式,...[FROM表名1[,表名2].....]/*FROM子句*/[WHERE条件]/*WHERE子......
  • 【SQL】⼀条 SQL 查询语句的执⾏顺序
    SQL查询语句的执行顺序与编写查询语句的顺序不同,理解SQL查询的执行顺序有助于更好地优化和调试SQL查询。下面是SQL查询语句的基本的执行顺序:FROM:确定数据源,包含表连接(JOIN)操作。ON:定义连接条件(对于JOIN子句)。WHERE:过滤数据,排除不符合条件的行。GROUPBY:对......
  • 详解 ClickHouse 的查询优化
    一、单表查询1.使用prewhere替代whereprewhere和where语句的作用相同,都是用来过滤数据prewhere和where语句的不同在于:prewhere只支持MergeTree族系列引擎的表prewhere首先会读取指定的列数据来判断数据过滤,等待数据过滤之后再读取select声明的列字段......
  • 纯真IP库查询方法(2024-6-19更新qqwry.dat后无法查询,修改代码)
    2024-6-19更新qqwry.dat后使用pthon38那篇文章里的代码无法查询,使用pythom2的代码,修改之后python3可用,将文件放到工程里查询,不用Lib库里的。修改后的qqwry.py如下,python3可用。coding=utf-8forPython2.7为https://pypi.python.org/pypi/qqwry-py3的Python2版版本:2017-10-......
  • 库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践
    1问题域业务发展的初期,我们的数据库架构往往是单库单表,外加读写分离来快速的支撑业务,随着用户量和订单量的增加,数据库的计算和存储往往会成为我们系统的瓶颈,业界的实践多数采用分而治之的思想:分库分表,通过分库分表应对存系统读写性能瓶颈和存储瓶颈;分库分表帮我们解决问题的同时......
  • Mongodb批量写入操作bulkWrite()
    学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第76篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。概述Mongodb提供了针对单一集合写操作批量执行......
  • 【Oracle】Oracle数据库查询某张表的全部字段与类型
    【Oracle】Oracle数据库查询某张表的全部字段与类型原文链接:https://blog.csdn.net/LI_AINY/article/details/86597377PS:TABLE_NAME对应的表名要全部大写查询表的所有字段名以及属性(所有用户)SELECT*FROMALL_TAB_COLUMNSWHERETABLE_NAME='T_UNIT_NAME'查询表的所有字......
  • MySQL中实现查询并按需要排序
    在MySQL中,实现查询并按需要排序主要使用SELECT语句,并结合ORDERBY子句。以下是一些基本的使用示例:基本查询和排序 SELECTcolumn1,column2,...FROMtable_nameORDERBYcolumn1ASC,column2DESC;column1,column2,...:你想查询的列名。table_name:你想查询的表名。......
  • Mybatis-Plus分页插件,嵌套查询和嵌套结果映射
    Mybatis-Plus分页插件注意事项使用Mybatis-Plus的分页插件进行分页查询时,如果结果需要使用<collection>进行映射,只能使用嵌套查询(NestedSelectforCollection),而不能使用嵌套结果映射(NestedResultsforCollection)。嵌套查询和嵌套结果映射是Collection映射的两种方式,下面通过......