mongodb性能诊断工具

2023年 7月 15日 24.3k 0

下载mongodb-database-tools后就自带了mongostat命令

使用mongostat

使用超级管理员查看admin库 1 是间隔1秒的意思

 ./mongostat  -h 127.0.0.1:27020  -u superadmin --password=password --authenticationDatabase=admin 1

image-20210809191954817.png

  • insert query update delete getmore command :

    在最近的一秒钟发生的操作。

  • getmore:

    是针对一些游标操作,第一次拿了100条,而游标返回了10000w条,需要一次次抓回来,这里表示有多少个getmore在执行

  • command :

    表示除了增删改查,包含增删改查,包括index等状态的命令都是通过command 来完成的

  • dirty :

mongodb是通过内存来缓存和增加数据,mongodb通过缓存来管理一些数据,默认是百分之60的内存使用,在这些内存之间有多少是被更新的,修改的,或者插入的。这些操作且没有刷盘的,就是dirty。这里的百分比表示没有刷盘的占用百分比。如果没有超过百分之5,后台程序会5分钟刷一次数据到盘上。如果百分比超过5,后台会启动程序自动把这些刷到盘上。从而尽量的保证在百分之5以下。而一旦超过百分之20,mongodb可能会停止接受前面的请求也要将数据刷到盘上,也就是超过百分之20时阻塞新请求。这种情况,要么是刷盘跟不上,磁盘IO跟不上。要么是写入压力太大。

  • used :

默认是百分之60的内存使用,百分之60的内存已经有百分之多少被使用了。低于百分之80的时候,mongdb不会做什么事情,超过百分之80开始清理动作,基于一些很久没有被使用的数据剔除,缓存清理动作。超过百分之95时阻塞新请求,并专注于清理缓存。

  • vsize :使用的内存大小
  • res: 实际使用的内存大小
  • qrw /arw : 超过10存在等待
  • net_in /net_out : 进出
  • conn : 连接数

使用mongotop

./mongotop  -h 127.0.0.1:27020  -u superadmin --password=password --authenticationDatabase=admin 2

间隔2秒抓一次

image-20210809200948855.png

  • ns : 来源库
  • total:总时间消耗
  • read:读时间消耗
  • write:写时间消耗

使用日志

配置

db.getProfilingStatus()查看是否开启

rs02:PRIMARY> db.getProfilingStatus()
{
    "was" : 1,
    "slowms" : 10,
    "sampleRate" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1628512885, 1),
        "signature" : {
            "hash" : BinData(0,"RXoRmbr9npCqd6IxClxVYWeIjzg="),
            "keyId" : NumberLong("6993996578134425604")
        }
    },
    "operationTime" : Timestamp(1628512885, 1)
}

设置:db.setProfilingLevel(level, slowms)

查看:db.system.profile.find()

  • evel:0,关闭;1,记录慢速操作;2,记录所有操作。
  • slowms:时间阈值,单位ms。

表示10毫秒的:db.setProfilingLevel( 1 , 10);

默认100ms

示例

2019-10-25T11:20:30.775+0800 I COMMAND [conn12] command test.test
appName: "MongoDB Shell" command: find { find: "test", filter: { i: 10000.0 },
$db: "test" } planSummary: COLLSCAN keysExamined:0 docsExamined:27108
cursorExhausted:1 numYields:211 nreturned:1 reslen:243 locks:{ Global:
{ acquireCount: { r: 424 } }, Database: { acquireCount: { r: 212 } }, Collection:
{ acquireCount: { r: 212 } } } protocol:op_command 19ms
  • docsExamined : 扫描文档数
  • locks: 锁信息
  • numYields: 执行计划
  • durationMillis: 执行时间

mtools

https://github.com/rueckstiess/mtools/releases

https://github.91chifun.workers.dev//https://github.com/rueckstiess/mtools/archive/refs/tags/v1.6.4.tar.gz

mtools可以分析mongo日志

yum install python3 -y
tar xf  v1.6.4.tar.gz && cd mtools-1.6.4
python3 setup.py install

常用指令:• mplotqueries 日志文件:将所有慢查询通过图表形式展现;• mloginfo --queries 日志文件:总结出所有慢查询的模式和出现次数、消耗时间等;

相关文章

最新发布!MySQL 9.0 的向量 (VECTOR) 类型文档更新
国产数据库中级认证HCIP-openGauss经验分享
保障数据完整性与稳定性:数据库一致性
OceanBase 里的 DDL 超时时间
OceanBase v3.1.x 将不再更新版本 | 社区月报2024.6
openGauss Developer Day 2024 | SIG组工作会议亮点回看!

发布评论