Mogodb-GridFs问题排查

问题情况说明

     测试功能时发现:Mogodb某天在操作文件时异常缓慢。程序和代码都没有任何修改。

问题排查及分析

  1. 分析变动的点:
    1. 最近一直有在做功能验证,mongodb的数据量一直在上涨。fs.trunks的大小为4万左右
    2. 第一次发现这个问题的时候做的操作:删除fs.files、fs.trunks【以前也这么干过】
  2. 进入mongodb  - linux服务器,执行top后发现mongodb的CPU消耗极高【4核CPU占了370%】
  3. 在mongo主节点执行如下命令:
    1. mongo
    2. use admin
    3. db.auth("管理员用户名","密码")
    4. db.currentOp({"ns":/^问题库名/})
    5. 找出所有 secs_running时间长的语句
  4. 分析耗时高的语句
  5. 发现fs.trunks消耗时间很长。command为:
    {
        "q":{
            "files_id":Object_Id("一段hash值")
        },
        "limit":0
    }

     

  6. 进一步分析:这个只是一个简单查询不应该这么慢

  7. 检查集合是否存在索引: db.fs.chunks.getIndexes()

  8. 发现 files_id字段没有索引【震惊!!】

  9. 到这就基本知道原因了,加上索引,问题解决。

总结

         分析索引消失原因:以前手动删除过集合【删除集合会把所有索引清空,只保留_id。】使用Spring的应用在没有集合的情况下启动时会自动创建集合及其索引,但是如果是运行时删了集合、再发生insert创建的集合是不带索引的

解决方案

使用命令或者工具加上索引: db.fs.chunks.createIndex( { files_id: 1, n: 1 }, { unique: true } );

官网也有这段解决方案:https://docs.mongodb.com/manual/core/gridfs/#gridfs-indexes  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值