MongoDB mongostat和mongotop性能监控命令的用法(非常详细)
MongoDB 开始提供服务后,我们必须了解它的运行状况,如 CPU、内存、硬盘等资源的使用情况,以保证大流量情况下 MongoDB 的正常运行。
MongoDB 提供了两个命令来监控其运行情况,这两个命令分别是 mongostat 和 mongotop。
如果数据库运行速度突然变慢或者出现其他问题,那么应首先考虑使用 mongostat 命令来查看 MongoDB 的状态。mongostat 命令的参数如下表所示:
mongostat 命令既可以连接 mongos 实例,也可以连接 mongod 实例,具体使用方式如下:
mongotop 命令的参数如下表所示:
mongotop 命令具体的使用方法与 mongostat 命令差不多,具体操作如下:
例如,查看某个数据库当前执行的操作,可以使用 db.currentOp() 方法;如果某个操作耗费时间过长,那么可以使用 db.killOp(opid)方法停止该操作。
另外,使用 db.setProfilingLevel() 方法可以设置 MongoDB 的 profiler 系统分析器,其中,profiler 系统分析器可用于采集与分析慢操作的数据请求,它在默认情况下是关闭的。查看 profiler 系统分析器的当前级别可以使用 db.getProfilingLevel() 方法,其中,级别值为 0、1、2:
profiler 系统分析器的设置方法如下:
MongoDB 提供了两个命令来监控其运行情况,这两个命令分别是 mongostat 和 mongotop。
MongoDB mongostat命令
mongostat 命令是 MongoDB 提供的命令行状态检测命令,该命令可以每秒刷新一次,获取 MongoDB 当前的运行状态,实时显示数据库的读/写、读/写等待队列等情况。如果数据库运行速度突然变慢或者出现其他问题,那么应首先考虑使用 mongostat 命令来查看 MongoDB 的状态。mongostat 命令的参数如下表所示:
参数 | 参数描述 |
---|---|
insert | 每秒的插入数据量 |
query | 每秒的查询数据量 |
update | 每秒的更新数据量 |
delete | 每秒的删除数据量 |
conn | 当前连接数 |
qr|qw | 客户端读/写队列的长度,值为 0 表示运行状态良好,值大于 0 表示服务处理速度慢 |
ar|aw | 活跃客户端的数量 |
time | 当前时间 |
mongostat 命令既可以连接 mongos 实例,也可以连接 mongod 实例,具体使用方式如下:
root@master:~# mongostat --host my_router --port 27017此时,终端窗口会以秒为单位不停地打印状态信息。若要查看指定多条信息,可以通过 -n 参数指定具体的条数。mongostat 命令的其他参数可以使用 --help 命令进行查看。
MongoDB mongotop命令
mongotop 命令是 MongoDB 数据库提供的另一个命令行状态检测命令,它只能连接 mongod 实例。mongotop 命令的参数如下表所示:
参数 | 功能说明 |
---|---|
ns | 数据库命名空间,结合数据库名称和集合 |
total | mongod 在这个命名空间花费的总时间 |
read | mongod 在这个命名空间读取所花费的时间 |
write | mongod 在这个命名空间写入所花费的时间 |
mongotop 命令具体的使用方法与 mongostat 命令差不多,具体操作如下:
root@master:~# mongotop --host my_shard --port 27017 -n 2除了以上两个性能监控命令,MongoDB 还提供一些数据库级别的监控方法。
例如,查看某个数据库当前执行的操作,可以使用 db.currentOp() 方法;如果某个操作耗费时间过长,那么可以使用 db.killOp(opid)方法停止该操作。
另外,使用 db.setProfilingLevel() 方法可以设置 MongoDB 的 profiler 系统分析器,其中,profiler 系统分析器可用于采集与分析慢操作的数据请求,它在默认情况下是关闭的。查看 profiler 系统分析器的当前级别可以使用 db.getProfilingLevel() 方法,其中,级别值为 0、1、2:
- 0 表示 profiler 系统分析器已关闭,并且不收集任何数据;
- 1 表示 profiler 系统分析器收集所花费的时间超过 slowms 值的数据;
- 2 表示 profiler 系统分析器收集所有操作的数据。
profiler 系统分析器的设置方法如下:
shard_rs:PRIMARY> db.getProfilingLevel() 0 shard_rs:PRIMARY> db.setProfilingLevel(1) shard_rs:PRIMARY> db.setProfilingLevel(1,{slowms:90}) # slowms 操作阈值为毫秒级,操作所耗费的时间大于此阈值则被认为是慢操作,会被记录到慢操作日志中。 # 该日志所在位置为test数据库下的一个固定集合system.profile