第8章 MongoDB监控
8.1 监控工具概述
MongoDB提供了多种监控工具来查看数据库运行状态,帮助管理员了解系统性能和资源使用情况。
mongo # 客户端连接工具
mongod # 启动命令
mongos # 分片路由命令
mongostat # 查看mongo运行状态
mongotop # 查看mongo运行状态
mongodump # 备份
mongoexport # 备份
mongoimport # 恢复
mongorestore # 恢复
bsondump # 将bson格式导出json格式
mongostat使用配置
基本使用命令:
mongostat --port 28018 -o vsize,res --humanReadable=false --noheaders -n 1
参数说明:
参数 | 功能说明 |
---|---|
--humanReadable=false | 将G转换为K |
--noheaders | 不输出首行标题 |
-n 1 | 只输出一次 |
mongostat指标解析
操作统计指标:
字段 | 说明 |
---|---|
insert/s | 每秒插入数据库的对象数量,如果是slave,数值前有*表示复制集操作 |
query/s | 每秒的查询操作次数 |
update/s | 每秒的更新操作次数 |
delete/s | 每秒的删除操作次数 |
getmore/s | 每秒查询cursor(游标)时的getmore操作数 |
command | 每秒执行的命令数,主从系统显示两个值(如3|0),分别代表本地|复制命令 |
注意:一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义不大)
WiredTiger引擎指标:
字段 | 说明 |
---|---|
dirty | 脏数据字节的缓存百分比(仅WiredTiger引擎) |
used | 正在使用中的缓存百分比(仅WiredTiger引擎) |
flushes | WiredTiger引擎:checkpoint触发次数;MMAPv1引擎:每秒fsync写入硬盘次数 |
监控要点:flushes一般都是0,间断性会是1。通过计算两个1之间的间隔时间,可以了解flush频率。频繁flush需要查找原因。
系统资源指标:
字段 | 说明 | 监控注意事项 |
---|---|---|
vsize | 虚拟内存使用量(MB) | 一般不会有大的变动 |
res | 物理内存使用量(MB) | 会慢慢上升,突然下降需检查是否有其他程序占用内存 |
qr | 客户端等待从MongoDB实例读数据的队列长度 | 数值很大表示DB处理不及请求速度 |
qw | 客户端等待向MongoDB实例写入数据的队列长度 | 同上 |
ar | 执行读操作的活跃客户端数量 | 需要检查是否有开销很大的慢查询 |
aw | 执行写操作的活跃客户端数量 | 同上 |
netIn | MongoDB实例的网络进流量 | 一般情况下不会成为瓶颈 |
netOut | MongoDB实例的网络出流量 | 同上 |
conn | 打开连接的总数,是qr,qw,ar,aw的总和 | 建议配置maxIncomingConnections在5000以下 |
性能提示:MongoDB为每个连接创建一个线程,线程创建与释放有开销,需适当配置连接数启动参数。
mongotop监控工具
mongotop # 基本监控
mongotop 5 # 每5秒刷新一次
实战监控案例
高资源占用检测:
测试数据插入:
use oldboy
for(i=1;i<10000;i++){
db.cook.insert({"id":i,"name":"BJ","age":70,"date":new Date()});
}
并行监控观察:
mongostat
mongotop
监控最佳实践
持续监控配置:
- 设置合适的监控间隔
- 关注关键性能指标变化趋势
- 结合系统级监控工具
- 建立告警机制
性能瓶颈识别:
- 监控队列长度(qr/qw)变化
- 观察连接数增长趋势
- 分析内存使用模式
- 检查慢查询影响
故障排查与优化
常见问题排查:
- 连接数过多:检查应用连接池配置
- 内存持续增长:分析查询模式和索引使用
- 队列积压:识别慢查询和资源瓶颈
- 网络流量异常:检查数据传输和同步状态
监控数据分析:
通过mongostat和mongotop的输出数据,可以:
- 建立性能基线
- 识别异常模式
- 预测容量需求
- 优化查询性能
更新: 2025-01-26