mongodb系列~故障排查问题
一 慢日志
1 分析大于N秒的慢日志
awk '$NF~/ms$/{print $1,$NF}' shard2.log|sed 's/ms//g'|awk '$2 > N {print $1,$2}'
2 在线添加索引
nohup mongo --eval " db.chenfeng.ensureIndex({"riqi":1},{background:true})" &
3 通过后台日志可以查看到索引进度
4 kill查询时间超过5s的所有请求:
db.currentOp().inprog.forEach(function(item){if(item.secs_running > 5 )db.killOp(item.opid)})
二 整体性能分析
mongostat -h ip:port -u用户名 -p密码 --authenticationDatabase=admin --discover
关注指标
insert/update/delete/query 可以发现是什么操作导致的负载问题
dirty:存储引擎脏数据比例,wt引擎默认为5% 很高就导致访问过慢 因为要强制刷脏
used:存储引擎cacheSize配置占用百分比,类似innoodb_buffer_pool使用率 当该统计值达到80%,evict线程将会触发选择涨数据淘汰,如果这个占比提高到95%,用户请求线程将会触发淘汰,客户端请求将会变慢;
qrw arw:等待队列数,如果该值越大,说明会引起客户端请求排队处理
vsize res:虚拟内存和物理内存真实占用,如果vsize过高,远远超过res,或者res过高,远远超过cachesize配置,则说明内存碎片,pageheap等问题,这时候可以通过加速 tcmalloc内存释放速率来解决问题。
mongotop -h ip:port -u用户名 -p密码 --authenticationDatabase=admin --discover
ns:数据库命名空间,后者结合了数据库名称和集合。
db:数据库的名称。名为 . 的数据库针对全局锁定,而非特定数据库。
total:mongod在这个命令空间上花费的总时间。
read:在这个命令空间上mongod执行读操作花费的时间。
write:在这个命名空间上mongod进行写操作花费的时间。
总结 利用mongostat定义什么操作 利用mongotop定义什么文档业务导致的
三 其他情况
1 本人遇到过因为numa导致的mongo cpu暴涨情况