常规操作
查看有没有启动 mongodb
ps -def | grep mongod
看看是否能够登录
mongo
查询当前所在的数据库
db
切换或创建数据库
use DATABASE_NAME
查看所有数据库
show dbs
/ show databases
查看所有数据集合(表)
show collections
慢查询
登录需要开启慢查询的数据库
use DBNAME
查看慢查询状态
db.getProfilingStatus()
输出:
{ "was" : 0, "slowms" : 100, "sampleRate" : 1 }
其中 was
字段可以取0,1,2 三个值,他们表示的意义如下:
0 – 不开启
1 – 记录慢命令 (默认为>100ms)
2 – 记录所有命令
而 slowms
则是记录的阈值,以毫秒为单位。
如果要开启慢日志收集,又不需要收集所有慢日志,只需要收集小于 200ms 的慢日志可以使用如下命令
db.setProfilingLevel(1, 200)
使用如下命令可以关闭慢日志
db.setProfilingLevel(0)
查看当前所有的慢查询日志
db.system.profile.find()
通过filter参数过滤日志
db.system.profile.find(
{"millis": {"$gte":1000}, "ts": {"$gte": ISODate("2023-11-08T02:23:25.289Z")}}
).pretty()
返回数据字段意义:
ts:时间戳
op: 操作类型
ns:执行操作的对象集合
millis:操作所花时间,毫秒
client: 执行操作的客户端
user: 执行操作的mongodb连接用户
当前操作
当 Mongodb 返回很慢,进程也占用 CPU 很多,就想要了解当下数据库正在执行什么查询。这个时候就要用到 db.currentOp()
。
可以在 sh 中直接运行,但会有很多数据出来。可以加入过滤参数。如:
db.currentOp(
{
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)
可以过滤出 db1
数据库中的已经运行超过 3 秒的活跃操作。