mongo命令太多?你至少需要记住这4个

简介: mongo命令太多?你至少需要记住这4个

自从上一篇文章聊聊非关系型数据库MongoDB索引,大家反响还不错,今天我们继续聊下mongo的服务命令,通过下面几个命令让你更加了解自己mongo服务应用状态。


一、使用db.currentOp()函数

该函数会列出数据库正在进行的所有操作,最常用的作用就是寻找速度较慢的操作。

opid 操作的唯一标志符,可以通过它来终止操作,通过db.killOp(opid)来终止该操作的执行。

op 表示操作类型,查询,插入,更新,删除一种

secs_running 表示该操作已经执行的时间。通过它来判断那些查询耗时过长,或者占用了过多的数据库资源。

默认currentOp()操作展示很多的数据,可以通过添加过滤条件展示符合展示结果,如下面。

image.png

二、系统分析器setProfilingLevel

查询耗时过长的操作,可以用系统分析器(system profiler)进行setProfilingLevel开启。

设置0, 关闭分析器

设置2,开启分析器会记录所有内容,所有读写记录在system.profile集合,但这会造成一定性能损失。

设置1,默认只显示长耗时(> 100ms)操作,也可以自己设置比如300ms, 这里不要将值设置过低,否则即使关闭了分析器,超过slowms值操作也会出现在日志中。

这种方式能更好发现,我们查询的耗时在哪儿,随时进行优化我们的应用的操作。


scanv_rs:PRIMARY> db.setProfilingLevel(1,300) 
{
    "was" : 0, # 状态
    "slowms" : 100, # 慢查询时间
    "sampleRate" : 1,
    "ok" : 1,
    "operationTime" : Timestamp(1541420614, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1541420614, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}


三、使用stats函数显示集合或数据库的值

比如 db.users.stats(),db.stats() 在线上列出数据库信息会拖慢数据库操作,需要注意不要在高峰期执行这类操作。


scanv_rs:PRIMARY> db.stats()
    "objects" : 1000000,  # 文档总数
    "avgObjSize" : 87.88889,
    "dataSize" : 87888890, # 此数据库数据占用空间大小
    "storageSize" : 27336704, # 数据库正在使用的总空间大小
    "numExtents" : 0,
    "indexes" : 3,
    "indexSize" : 33841152,
    "fsUsedSize" : 223878615040,
    "fsTotalSize" : 249779191808,
    "ok" : 1,
    "operationTime" : Timestamp(1541421778, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1541421778, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}


四、使用mongotop和mongostat

mongotop类似unix命令top命令,mongostat提供服务器信息,默认每秒输出一次包含当前状态列表

image.png

通过上面的几个命令,我们便能够更加了解我们服务发生了什么,以及该做一些什么来改变应用的状态,比如加索引,调整查询条件等等方式,让我们的服务时刻保持最佳状态。

相关文章
|
7月前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
|
4月前
|
监控 Linux
在Linux中,有⼀个脚本运行时间可能超过2天,如何做才能使其不间断的运行,而且还可以随时观察脚本运行时的输出信息?
在Linux中,有⼀个脚本运行时间可能超过2天,如何做才能使其不间断的运行,而且还可以随时观察脚本运行时的输出信息?
|
SQL 缓存 关系型数据库
故障案例:MySQL唯一索引有重复值,官方却说This is not a bug
故障案例:MySQL唯一索引有重复值,官方却说This is not a bug
227 0
|
SQL Java 关系型数据库
mysql 同表 父子关系查询 【亲测可用】
mysql 同表 父子关系查询 【亲测可用】
996 0
有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务。 有m个询问,每个询问有一个数字q,表示如果在q时间有一个工作表之外的任务请求,请计算何时这个任务才能被执行。 机器总是按照工作表执行,当机器空闲时立即执行工作表之外的任务请求。
Input 输入的第一行包含一个整数T, 表示一共有T组测试数据。 对于每组测试数据: 第一行是两个数字n, m,表示工作表里面有n个任务, 有m个询问; 第二行是n个不同的数字t1, t2, t3....tn,表示机器在ti时间执行第i个任务。 接下来m行,每一行有一个数字q,表示在q时间有一个工作表之外的任务请求。 特别提醒:m个询问之间是无关的。 [Technical Specification] 1. T <= 50 2. 1 <= n, m <= 10^5 3. 1 <= ti <= 2*10^5, 1 <= i <= n 4. 1 <= q <= 2*10^5 Ou
156 0
|
关系型数据库 测试技术 Shell
linux shell命令行下操作mysql 删除mysql指定数据库下的所有表--亲测成功百分百测试通过--绝对可靠
1,在shell提示符下查看mysql指定数据库下的表等数据 2.批量删除mysql下指定数据库下的所有表,Ruiy完成绝对测试---通过Pass for tb in `echo "use se;show tables" | mysql -p321`;do mysql -e "drop table se.
1634 0
|
关系型数据库 MySQL 测试技术
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
194 0
|
关系型数据库 MySQL 索引
带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!
带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!
带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!
|
算法 关系型数据库 MySQL
新来的领导下令升级 MySQL 8.0,完美掉坑…
你在使用MySQL的Group by分组时,是否发现分组后的数据都是有序的?
368 0
|
关系型数据库 MySQL Linux
mysql太多连接问题及解决方案
不管是JavaEE开发还是其他,只要是Linux系统下安装的mysql,通常默认最大连接为270。 如果你的客户端连接超过这个数,通常要么是配置文件修改,或者是命令行修改,配置文件修改和命令行修改的区别是,配置文件,既然是文件通常持久化到硬盘,保存最长,如果是命令行的话,仅仅只能保持在Mysql运行状态,如果一旦MySQL因为某种原因宕机或者关闭了,命令行的方式就失效了。
1494 0