首页 > 数据库 >MongoDB Profiling慢日志详解

MongoDB Profiling慢日志详解

时间:2024-08-20 15:29:37浏览次数:17  
标签:profile Profiling setProfilingLevel MongoDB db system 日志

MongoDB的Profiler类似MySQL的SlowLog和GeneralLog的结合,通过设置不同的Profiling级别,来决定记录哪些实例执行过的CURD、配置和管理命令。

Profiler会将搜集的内容记录在每个被Profiled的数据库中,名为system.profile的capped固定集合中。 开启Profiling会对数据库性能造成一定的损耗并占用一定的磁盘空间,设置的Profiling级别越高,资源消耗越大。

Profiling

Profiling级别

  • 0 : 禁用Profiling。默认级别
  • 1 : 只记录执行时长超过slowms或符合filter过滤规则的命令(SlowLog)
  • 2 : 记录所有的操作(GeneralLog)

Profiling的作用域

  • slowms和sampleRate的配置是全局配置,会影响所有的database。slowms慢日志阈值也会作用于diagnostic log。
  • 通过db.setProfilingLevel()命令启用并设置Profiling级别,还有Profiling的filter过滤规则只影响当前连接的database。
  • 通过命令行参数或配置文件指定Profiling级别或filter过滤规则会影响整个实例的所有database。
  • 无法在mongos上面启用Profiling,在mongos上设置slowms和sampleRate只会影响diagnostic log。 
  • 对于Secondary成员,在应用的oplog条目执行时间超过慢日志阈值时,操作会被记录到diagnostic诊断日志中,但是不会被Profiler捕获。

操作Profiling

配置Profiling
## 启用Profiling(启用后Mongo会自动创建system.profile集合)
# 为当前数据库启用Profing并只记录超过慢日志阈值的操作(默认慢日志阈值为100ms)
db.setProfilingLevel(1)

# 为当前数据启用Profiling并设置慢日志阈值为20ms
db.setProfilingLevel( 1, { slowms: 20 } )

# 在mongos上设置slowms慢日志阈值(只会影响diagnostic log)
db.setProfilingLevel( 0, { slowms: 20 } )

# 配置慢日志记录的随机采样率(只随机记录百分之“sampleRate”的慢日志到Profiling日志和诊断日志中;默认为1,采样率100%)
db.setProfilingLevel( 1, { sampleRate: 0.42 } )

# 设置慢日志过滤器filter;只记录执行时间超过2s的query操作
db.setProfilingLevel( 2, { filter: { op: "query", millis: { $gt: 2000 } } } )
获取Profiling配置
db.getProfilingStatus()
关闭Profiling
db.setProfilingLevel(0)
命令行全局配置Profiling
mongod --profile 1 --slowms 15 --slowOpSampleRate 0.5
配置文件全局配置Profiling
# 示例一:
operationProfiling:
   mode: slowOp
   slowOpThresholdMs: 2000
   slowOpSampleRate: 1
   filter: '{ op: "query", millis: { $gt: 2000 } }'
   
# 示例二:
operationProfiling:
   mode: slowOp

   filter: '{ op: "query", millis: { $gt: 2000 } }'

查看慢日志

# 获取最近10条慢日志记录
db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()

# 返回除command命令之外的所有慢日志
db.system.profile.find( { op: { $ne : 'command' } } ).pretty()

# 返回某个集合的慢日志
db.system.profile.find( { ns : 'mydb.test' } ).pretty()

# 返回超过5ms的慢日志
db.system.profile.find( { millis : { $gt : 5 } } ).pretty()

# 返回某个时间段内的慢日志
db.system.profile.find( {
   ts : {
      $gt: new ISODate("2011-07-12T03:00:00Z"),
      $lt: new ISODate("2011-07-12T03:40:00Z")
   }
}, { user: 0 } ).sort( { millis: -1 } )

修改system.profile容量

system.profile为一个默认大小只有1M的capped集合,通常只能容纳上千条记录。修改system.profile容量的操作如下: 在Primary实例上:
  1. 关闭Profiling
  2. 删除system.profile集合
  3. 创建system.profile集合
  4. 从新开启Profiling
db.setProfilingLevel(0)

db.system.profile.drop()

db.createCollection( "system.profile", { capped: true, size:4000000 } )

db.setProfilingLevel(1)
对于Seconary实例: 必须先将其踢出副本集,将其作为单实例,然后执行上述修改操作,之后再将其加入到副本集。

Profiling慢日志详情

https://www.mongodb.com/docs/manual/reference/database-profiler/

标签:profile,Profiling,setProfilingLevel,MongoDB,db,system,日志
From: https://www.cnblogs.com/wagaga/p/18369503

相关文章

  • 基于“日志审计应用”的 DNS 日志洞察实践
    作者:羿莉(萧羿)基础背景DNS(DomainNameSystem)[1]是任何网络活动的基础。它将易于记忆的域名转换为机器能够理解的IP地址。监控DNS服务可以帮助用户识别网络活动并保持系统安全。出于合规和安全性的考虑,公司通常要求对网络日志进行存储和分析。通过DNS日志,可以清晰......
  • [Mysql]日志刷盘总结
    Mysqlredolog的刷盘时机mysql正常关闭的时候redologbuffer写入超过一半的时候后台线程每隔一秒写入磁盘一次0把redologbuffer中的内容刷盘2把pagecache中的内容刷盘事务提交的时候0每次提交事务,redolog留在buffer中不写入磁盘1每次提交事务,redolog写入磁......
  • Avalonia开发日志
    关于WebAssembly的调研今天再次针对Avalonia进行了一些调研,主要是针对Avalonia在浏览器上运行的可行性调研。从目前的资料来看,Avalonia已经支持WebAssembly,包括创建的工程,也包含Browser的工程。但不知道为什么,执行以后,不会跳转到主界面。关于WebAssembly平台,官方有文档说明,但按......
  • Kafka--分布式MQ系统、日志系统
    简介:Kafka是由Linkedin(领英)开发的一个分布式、分区多副本、多订阅者、基于Zookeeper协调的分布式日志/MQ系统,于2010年贡献给Apache基金会并成为顶级开源项目。Kafka的特性#1、高吞吐、低延迟kafka最大的特点就是收发消息非常快,kafka每秒可以处理百万级别的消息,最低延迟......
  • 在无法直接捕获日志时,如何提取系统崩溃的DUMP文件
    面对EC7XX系列芯片那“寸土寸金”的Flash空间,我们在处理异常或死机情况时,无法直接将整个RAM内容无差别地转储(dump)到Flash中以供后续详尽分析。咱们不能像玩618系列那样,随便把RAM里的内容一股脑儿往Flash里倒,毕竟空间有限嘛。遇到系统异常或“罢工”的时候,咱们得玩点高级的,得......
  • Oracle 12c后enable_ddl_logging的日志位置变化
     Oracle12c后enable_ddl_logging的日志位置变化 先吐个槽,enable_ddl_logging功能是OracleChangeManagementPack的一部分,需要作为单独的许可证购买,要单独花钱......开启enable_ddl_logging功能,在11g中,ddl操作将以XML格式被记录在ADR_HOME/trade/alert_<SID>.log文件中......
  • 【项目】多设计模式下的同步&&异步日志系统(二)
    继上文对日志系统的介绍,并且实现了日志等级、日志消息的定义、以及格式化消息等。由这三个模块就能完整的输出一条消息。但是考虑到日志消息不可能全部都通过显示器展示。本项目针对落地方式,也进行多种编写,以供使用。消息落地类(简单工厂模式)消息落地的方式标准输出文件按......
  • 【项目】多设计模式下的同步&&异步日志系统(三)
    继前俩次完成了日志系统的等级类、消息结构以及格式化消息,并且将格式化的数据实现落地。落地存在同步和异步的落地方式。同步:本线程生成消息,并且进行IO写。异步:线程生成消息,交给子线程写。为此实现了双缓冲区用来减少异步带来的频繁申请锁释放锁减低效率。本文继续实现异步......
  • .NET Core 里的优秀日志框架Serilog、NLog、Log4Net、Microsoft.Extensions.Logging
    在.NETCore中,Serilog、NLog、Log4Net、Microsoft.Extensions.Logging都是流行的日志记录框架,它们各自具有不同的特点和用法。以下是对这些日志框架使用方法的概述:目录1.Serilog2.NLog3.Log4Net4.Microsoft.Extensions.Logging1.Serilog特点:可配置性强,支持链式......
  • bat 检查某个补丁是否安装成功 ,并将结果输出到日志1.log,支持多个补丁,每次运行log文件
    以下是一个可以检查多个补丁是否安装成功,并将结果输出到 1.log 文件(每次运行重新生成)的BAT脚本示例:bat@echooffrem清空日志文件del1.logrem定义要检查的补丁列表setpatches=KB123456KB789101KB234567rem遍历补丁列表进行检查并输出结果到日志for%%pin......