首页 > 数据库 >mongodb慢查询基础知识

mongodb慢查询基础知识

时间:2023-12-03 16:46:16浏览次数:41  
标签:收集 MongoDB 数据库 db 查询 mongodb 基础知识 slowms

慢查询基础知识

介绍

如何定位 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 }

开启方式

通过配置文件启用

  • 编辑mongodb配置文件,并且在配置文件中添加以下内容
# 设置是否开启慢查询
profile=1  # 0:代表关闭,不收集任何慢查询;1:收集慢查询数据,默认收集超过100毫秒的慢查询;2:收集任何操作记录数据

# 设置慢查询阈值为100ms
slowms=100  # 视情况而定
  • 重启mongodb
sudo service mongod restart

通过shell开启

命令:db.setProfilingLevel()

db.setProfilingLevel(<level>, <options>);

Parameters
参数:level
Type: integer

0	profiler已关闭,并且不收集任何数据。这是默认的profiler级别。
1	profiler收集花费的时间超过slowms值的数据。
2	profiler收集所有操作的数据。

参数:options
Type: document or integer
Description:可选的,接受document or integer。如果将整数值作为options参数而不是文档作为参数传递,则该值将分配给slowms。

查看是否开启慢查询

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

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

慢查询日志查看

  1. 如何查询慢查询日志
    假设上面我们已经开启了慢查询监控功能,那在数据库使用过程中,会将 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-11-03 15 点整到 2023-11-03 15点30分 之间的日志
db.system.profile.find({ts : {$gt: new ISODate("2023-11-03T07:00:00Z"),$lt: new ISODate("2023-11-03T07:30:00Z")}}).pretty()

标签:收集,MongoDB,数据库,db,查询,mongodb,基础知识,slowms
From: https://www.cnblogs.com/MyUniverse/p/17873351.html

相关文章

  • C语言基础知识
    C语言的特点关键字(32个):auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、static、sizeof、struct、switch、typedef、union、unsigned、void、volatile、while......
  • AntDesignBlazor示例——列表查询条件
    本示例是AntDesignBlazor的入门示例,在学习的同时分享出来,以供新手参考。示例代码仓库:https://gitee.com/known/AntDesignDemo1.学习目标重构项目文件结构添加日期查询条件实现查询业务逻辑2.重构项目结构在实现列表查询条件功能之前,我们先重构一下项目结构,创建天气Mod......
  • 数据过多时候,子查询改成left join减少笛卡尔积
    子查询SELECT cn.portal_idASportalId, count(id)ASnumFROM construction_package_wbs_nodecnWHERE cn.delete_flag=0 AND( cn.node_type='单位工程' ORcn.node_type='分部工程' ORcn.node_type='分项工程' ORcn.no......
  • 【面试攻略】Oracle中blob和clob的区别及查询修改方法
    大家好,我是小米,欢迎来到小米的技术小屋!今天我们要一起来聊聊一个在面试中常常被问到的问题——“Oracle中Blob和Clob有啥区别,在代码中怎么查询和修改这两个类型的字段里的内容?”别急,跟着小米一步步揭开这个技术的神秘面纱!Blob和Clob是什么?首先,让我们来了解一下Blob和Clob是什么。......
  • 学习C语言必备的基础知识详解
    (⽬录)前言学习C语言的第一步,肯定是要先去学习了解一下相关的概念和符号,我们写的代码就是由一堆规定好的有特殊含义的符号组成的。1、数据类型C语言的数据类型细分出来会有很多种,每种数据类型占内存大小都不同,对于刚接触编程语言的人来说,确实很让人头疼。其实存在这么多的类型,......
  • 领先一步,效率翻倍:PieCloudDB Database 预聚集特性让查询速度飞起来!
    在大数据时代,如何有效地管理和处理海量数据成为了企业面临的核心挑战。为此,拓数派推出了首款数据计算引擎PieCloudDBDatabase,作为一款全新的云原生虚拟数仓,旨在提供更高效、更灵活的数据处理解决方案。PieCloudDB的设计理念源于对用户使用体验和查询效率的深度理解。在实现存算......
  • SQL-高级查询和连接-1789. 员工的直属部门
    注意事项:找出员工的直属部门,可能有两种情况:员工加入多个部门,则选择对应的primary_flag是‘Y’的员工只有一个部门,对应的primary_flag是‘N’返回结果没有顺序要求解题思路:首先来看一下我的错误方法:selectemployee_id,department_idfromEmployeegroupbyemployee......
  • 软考架构师(2)——操作系统基础知识(上)
    一:操作系统引论1:操作系统的目标和作用操作系统的主要功能也正是针对四类资源进行有效的管理,及处理机管理,存储器管理,文件管理。设备管理。用户可通过以下三种方式使用计算机:一命令方式,二系统调用方式,三图形窗口方式联机命令接口(交互式命令接口):适用于分时或实时操作系统,cmd中的......
  • MongoTemplate操作MongoDB
    集成简介spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。搭建开发环境1、创建springbo......
  • 子查询、Concat 字符拼接 ,Cast截取小数位 函数使用
    selectqh.CaseId,(selectsh.CaseIdfromServiceQuot.dbo.Headershwhereqh.QutoNo=sh.HeaderNo),qh.ApplierDate,qh.BU,qh.Site,qh.HeaderNo,qh.Currency(selectsh.CustomerfromServiceQuot.dbo.Headershwhereqh.QutoNo=sh.HeaderNo),qh.PN......