第7.2.1 mongodb索引优化

从下图可以看到我的4核CPU,已经满负荷运转,跑不动了,mongo都进行消耗了371.1%,那么怎么办呢?
1
执行命令db.getProfilingLevel(),结果是0,参考Mongodb高级篇-性能优化,说明profile功能关闭
执行下面的脚本,启动慢命令,默认是100ms

db.setProfilingLevel(1)

1
在查询的db中执行命令db.system.profile.find({millis:{$gt:300}}),找到查询300ms的脚本
1
执行db.serverStatus(),连接数都是正常的
1
执行命令iostat -m 2,参考Linux iostat命令详解
用户写入mongo的cpu消耗大量cpu,但是磁盘io并不大,tps也就50+
1
查看日志,那么解读mongo的日志呢?

2019-04-12T15:30:20.229+0800 I WRITE    [conn6744] remove my_db.key_person query: { eId: "edb714f675e1ea4f681849f81886f26c" } ndeleted:1 keyUpdates:0 writeConflicts:0 numYields:16847 locks:{ Global: { acquireCount: { r: 16848, w: 16848 } }, Database: { acquireCount: { w: 16848 } }, Collection: { acquireCount: { w: 16848 } } } 15444ms
2019-04-12T15:30:20.229+0800 I COMMAND  [conn6744] command my_db.$cmd command: delete { delete: "key_person", ordered: true, deletes: [ { q: { eId: "edb714f675e1ea4f681849f81886f26c" }, limit: 0 } ] } keyUpdates:0 writeConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r: 16848, w: 16848 } }, Database: { acquireCount: { w: 16848 } }, Collection: { acquireCount: { w: 16848 } } } protocol:op_query 15444ms
2019-04-12T15:30:20.297+0800 I WRITE    [conn6818] remove my_db.key_person query: { eId: "7406c37d112d302bf377fe6a8d944d5c" } ndeleted:0 keyUpdates:0 writeConflicts:0 numYields:16843 locks:{ Global: { acquireCount: { r: 16844, w: 16844 } }, Database: { acquireCount: { w: 16844 } }, Collection: { acquireCount: { w: 16844 } } } 15881ms
2019-04-12T15:30:20.297+0800 I COMMAND  [conn6818] command my_db.$cmd command: delete { delete: "key_person", ordered: true, deletes: [ { q: { eId: "7406c37d112d302bf377fe6a8d944d5c" }, limit: 0 } ] } keyUpdates:0 writeConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r: 16844, w: 16844 } }, Database: { acquireCount: { w: 16844 } }, Collection: { acquireCount: { w: 16844 } } } protocol:op_query 15881ms
2019-04-12T15:30:20.316+0800 I WRITE    [conn6824] remove my_db.key_person query: { eId: "3ef65efba64828acc5a77f075bf998dc" } ndeleted:0 keyUpdates:0 writeConflicts:0 numYields:16876 locks:{ Global: { acquireCount: { r: 16877, w: 16877 } }, Database: { acquireCount: { w: 16877 } }, Collection: { acquireCount: { w: 16877 } } } 15762ms
2019-04-12T15:30:20.316+0800 I COMMAND  [conn6824] command my_db.$cmd command: delete { delete: "key_person", ordered: true, deletes: [ { q: { eId: "3ef65efba64828acc5a77f075bf998dc" }, limit: 0 } ] } keyUpdates:0 writeConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r: 16877, w: 16877 } }, Database: { acquireCount: { w: 16877 } }, Collection: { acquireCount: { w: 16877 } } } protocol:op_query 15762ms

mongo的操作时间太长了,要15+s,于是根据字段创建索引db.key_person.createIndex({eId:1}),mongo的操作时间可以提升300倍
再监控cpu,可以发现cpu已经大幅度下降了。
1
再次监控磁盘io,tps已经可以达到2311了,这样的话,就可以再多启动进程了。对于数据库来说,创建索引简直就是王道,剩下关键的问题,就是怎么合理的创建索引,和利用资源了
1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值