2020-11-21 mongodb 慢查询日记

      使用spring data template 操作mongodb的时候,忘记 在实体上加 注解@Document  导致查询全文搜索,导致mongodb cpu 飙高,用户登陆卡死。

早上客服反映无法正常登陆,我马上想到查询服务器后台日志,发现mongodb 查询超时,不断的打印错误到日志。

     于是,我停掉了查询日志的统计进程。再看Java 后台打印,发现 linux top 命令 发现 mongodb cpu 仍然再17~60%之间徘徊,显然不是这个问题。我判断

是查询慢导致的卡顿,所以百度搜索了一下mongodb 慢查询。。。。。。

     除了再启动服务器的时候 设置相关参数(服务器正在运行,不可能重启),还可以通过再连接客户端进行设置(这下好了)。打开robo 3t  找到数据 执行db.setProfilingLevel(1)  开启慢查询,在我的数据下出现了 system 文件夹,system 下自动创建了"system.profile"的 collecion ,打开表我看到 慢查询的 内容

{
    "op" : "query",
    "ns" : "xx.xxxx",
    "query" : {
        "find" : "xxxxx",
        "filter" : {
            "state" : 1,
            "userId" : "xxxxx"
        }
    },................................等

问题找到了,在项目里找到xxxx 实体类,由于加班赶工期,忘记在实体上标记 @Document ,字段上标记的索引都没有生效。 查询的时候 进行了全文搜索。。。。。。。

给实体加上注解。本地启动进程连接远程库,神奇的发现,并没有自动创建索引!

         难道spring 骗我不成?。。。。。。。。。。。。。。。。。先冷静一下。我决定在本地库上试试, 这个实体对应的表,在启动服务器后, 插入一条数据,索引生成了。再次用java 连接远程库,启动服务器的监听 插入一条数据到 指定的 表中,问题解决。

    总结一下, 使用spring 操作数据库的时候,不要忘记 @Document 注解 ,慢查询可以帮助我们很快的定位 哪个查询很慢; 冷静思考,哪怕有人在旁边催你,可能错误就是一个低级错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值