博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb系列~mongodb慢语句(2)
阅读量:6121 次
发布时间:2019-06-21

本文共 862 字,大约阅读时间需要 2 分钟。

一简介:今天遇到一个慢日志的排查和解决过程

二 版本:3.0.6

三 架构:分片集群

四 具体过程

     1 程序响应很慢,具体日志寻找定点sql(mongodb慢日志记录在log日志里)

       awk '$NF~/ms$/{print $1,$NF}' shard2.log|sed 's/ms//g'|awk '$2 > 12000 {print $1,$2}' 这里我统计的是大于12S的,

     2 通过分析定位具体sql为查询语句,条件是等值查询

     3 获取collection的所有索引

     db.chenfeng.getIndexes(); 可以发现并没有查询条件的字段为索引

     4  在线添加索引

      db.chenfeng.ensureIndex({"riqi":1}) 在这时候发现一直在卡住

      mongo  --eval "printjson(db.currentOp())"  发现此操作处于锁等待状态,于是改为后台执行

       db.killOp(opid) 干掉进程(这里补充下,mongodb的session即便kill,也需要很久才能释放,相当的无语_

     5 后台添加索引

      db.chenfeng.ensureIndex({"riqi":1},{background:true})

      这里要注意两点

       1 后台执行的意思是不阻塞DML操作,但是本身执行命令会卡住,所以我们采用nohup执行

        nohup  mongo  --eval " db.chenfeng.ensureIndex({"riqi":1},{background:true})"  &

       2 处在后台创建索引的进程是否完成,一定要依赖于explain 定位索引

          db.system.indexes.find() db.chenfeng.getIndexes() 命令都可以查看后台添加的索引,但是这并不代表已经完成,所以查询语句依然会可能应用不到索引(我整整用了一下午排坑)

 

转载于:https://www.cnblogs.com/danhuangpai/p/9135079.html

你可能感兴趣的文章
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>
while()
查看>>
常用限制input的方法
查看>>
Ext Js简单事件处理和对象作用域
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
12.通过微信小程序端访问企查查(采集工商信息)
查看>>
WinXp 开机登录密码
查看>>
POJ 1001 Exponentiation
查看>>
HDU 4377 Sub Sequence[串构造]
查看>>
云时代架构阅读笔记之四
查看>>
WEB请求处理一:浏览器请求发起处理
查看>>
Lua学习笔记(8): 元表
查看>>
PHP经典算法题
查看>>
LeetCode 404 Sum of Left Leaves
查看>>
醋泡大蒜有什么功效
查看>>