MongoDB查询时被锁住的问题

本文描述了在使用MongoDB 1.8.1版本时,由于查询参数类型错误导致的锁屏问题。当使用double类型而非NumberLong类型查询长整型字段sceneId时,查询被阻塞,占用CPU接近100%。通过分析发现,问题出现在排序(orderby)结合索引时,MongoDB尝试将NumberLong转换为double进行比较。在Java端,由于驱动自动转换,未出现此问题。解决方案是确保查询参数类型与字段类型匹配,避免不必要的资源消耗。
摘要由CSDN通过智能技术生成

 

 1.       背景

mongoDB版本1.8.1

 

collection stats

> db.user.gift.stats()

{

        "ns" : "statgame.user.gift",

        "count" : 650,

        "size" : 162804,

        "avgObjSize" : 250.46769230769232,

        "storageSize" : 696320,

        "numExtents" : 4,

        "nindexes" : 3,

        "lastExtentSize" : 524288,

        "paddingFactor" : 1.0099999999999576,

        "flags" : 1,

        "totalIndexSize" : 180224,

        "indexSizes" : {

                "_id_" : 40960,

                "day_1_userId_1_fromId_1_sceneId_1" : 81920,

                "idx_modified_time_long" : 57344

        },

        "ok" : 1

}

 

indexes

> db.user.gift.getIndexes()

[

        {

                "name" : "_id_",

                "ns" : "statgame.user.gift",

                "key" : {

                        "_id" : 1

                }

        },

        {

                "name" : "day_1_userId_1_fromId_1_sceneId_1",

                "ns" : "statgame.user.gift",

                "unique" : true,

                "key" : {

                        "day" : 1,

                        "userId" : 1,

                        "fromId" : 1,

                        "sceneId" : 1

                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值