MongoDB 中提供了 mongostat 和 mongotop 两个命令来监控 MongoDB 的运行情况。
注意:从 MongoDB 4.4 之后,这些工具并没有随安装包一起发布,需要的用户自行下载,下载地址:https://www.mongodb.com/try/download/database-tools
mongostat 命令是 MongoDB 自带的状态检测工具。它会间隔固定时间获取 MongoDB 的当前运行状态并输出。如果你发现数据库突然变慢或者有其他问题的话,你首先想到是使用 mongostat 来查看 MongoDB 的状态。
在命令行直接运行 mongostat 命令,如下:
C:UsersAdministrator> mongostat insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 111b 57.5k 4 Sep 8 12:49:27.618 *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 112b 57.7k 4 Sep 8 12:49:28.617 *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 112b 57.8k 4 Sep 8 12:49:29.615 *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 111b 57.6k 4 Sep 8 12:49:30.616 *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 111b 57.6k 4 Sep 8 12:49:31.617 *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 112b 57.7k 4 Sep 8 12:49:32.617 *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 111b 57.2k 4 Sep 8 12:49:33.624 *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 112b 57.7k 4 Sep 8 12:49:34.624 *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 5.47G 226M 0|0 0|0 112b 57.8k 4 Sep 8 12:49:35.621
输出信息中标题说明如下:
insert:每秒插入的文档数。
query:每秒执行的查询数。
update:每秒执行的更新操作数。
delete:每秒执行的删除操作数。
getmore:每秒执行的获取更多(cursor)操作数。
command:每秒执行的命令数。
dirty:WiredTiger存储引擎中dirty 数据占缓存百分比
used:WiredTiger存储引擎中引擎使用缓存占百分比
flushes:每秒执行的刷新操作数。
vsize:mongod 进程的虚拟内存大小(单位:MB)。
res:mongod 进程的常驻内存大小(单位:MB)。
qrw: 客户端等待从 MongoDB 实例读写数据的队列长度,使用 | 隔开。
arw:执行读写操作的活跃客户端数量,使用 | 隔开。
net_in:MongoDB 实例的网络进流量。
net_out:MongoDB 实例的网络出流量。
conn:当前的连接数。
time:获取信息的时间。
点击 “工具 mongostat” 查看更多信息。
ngotop 也是 MongoDB 下的一个内置工具,用于监视 MongoDB 实例中的读写操作。它提供了实时的读写操作统计信息,可以帮助用户了解 MongoDB 实例的繁忙程度和哪些操作消耗了最多的时间。
使用 mongotop 命令时,可以指定以下选项:
--host:MongoDB实例的主机名,默认为本地主机。
--port:MongoDB实例的端口号,默认为27017。
--username:连接MongoDB实例所需的用户名。
--password:连接MongoDB实例所需的密码。
--authenticationDatabase:用于进行身份验证的数据库,默认为admin。
--namespace:只显示指定命名空间的读写操作统计信息。
--locks:显示锁定的读写操作统计信息。
--sleep:指定每次采样之间的睡眠时间(以秒为单位),默认为1秒。
--json:以JSON格式输出读写操作统计信息。
使用 mongotop 监测本地 MongoDB 服务的读写情况(默认 mongotop 返回数据间隔为一秒),例如:
C:UsersAdministrator> mongotop 2023-09-08T13:04:21.215+0800 connected to: mongodb://localhost/ ns total read write 2023-09-08T13:04:22+08:00 admin.system.version 0ms 0ms 0ms config.system.sessions 0ms 0ms 0ms config.transactions 0ms 0ms 0ms local.system.replset 0ms 0ms 0ms ns total read write 2023-09-08T13:04:23+08:00 admin.system.version 0ms 0ms 0ms config.system.sessions 0ms 0ms 0ms config.transactions 0ms 0ms 0ms local.system.replset 0ms 0ms 0ms ...
结果字段说明:
ns:包含数据库命名空间,后者结合了数据库名称和集合。
total:mongod花费的时间工作在这个命名空间提供总额。
read:提供了大量的时间,这mongod花费在执行读操作,在此命名空间。
write:提供这个命名空间进行写操作,这mongod花了大量的时间。
更多示例如下:
(1)限制 mongotop 每间隔 10 秒返回一次统计信息,例如:
C:UsersAdministrator> mongotop 10 2023-09-08T13:11:04.536+0800 connected to: mongodb://localhost/ ns total read write 2023-09-08T13:11:14+08:00 admin.system.version 0ms 0ms 0ms config.system.sessions 0ms 0ms 0ms config.transactions 0ms 0ms 0ms local.system.replset 0ms 0ms 0ms ns total read write 2023-09-08T13:11:24+08:00 admin.system.version 0ms 0ms 0ms config.system.sessions 0ms 0ms 0ms config.transactions 0ms 0ms 0ms local.system.replset 0ms 0ms 0ms ...
注意,mongotop 命令后面的 10 是 <sleeptime> 参数,用来指定 mongotop 两条数据的间隔时间。
(2)使用 --locks 选项报告每个数据库的锁使用情况,例如:
C:UsersAdministrator> mongotop --locks
点击 “工具 mongotop” 查看更多信息。