繁体   English   中英

使用C#驱动程序的Mongo查询速度较慢,但​​使用mongo Shell的速度较快

[英]Mongo query is slow using C# driver but fast using mongo shell

MongoDB C#驱动程序出现了非常奇怪的问题。 我有一个非常简单的查询,并且该查询有正确的索引。 当我使用MongoChef(和使用Shell)运行查询时,我在22毫秒内得到了结果。但是当我的应用运行相同的查询时,返回答案大约需要2.5分钟(这不是由于网络问题)。

我已经检查了db.currentOp(),发现操作确实需要大约2.5分钟才能完成,并且查询与我手动运行的查询相同,并且执行计划确实使用了索引。 任何想法? 谢谢

PS问题不在于结果集的大小! 我用结果集进行了测试,结果集有0个结果,21个结果和600,000个结果,所有这些结果都太可怕了! (在2m以上仅需21个结果,而在外壳中无需花费时间!)

{
  "inprog": [
       {
         "opid" : 53214,
         "active" : true,
         "secs_running" : 174,
         "microsecs_running" : 174085497,
         "op" : query,
         "ns" : db.collection,
         "query" : {{$query : {ParentId: 55, IsDeleted : false}},
              {$orderby : {_id : -1}}},
         "planSummary": IXSCAN {_id : 1},
         "client" : ip:port,
         "desc" : conn121254,
         "threadId" : 0x1234567,
         "connectionId" : 1254651,
         "locks" : {
             "Global" : r,
             "MMAPV1Journal" : r,
             "Database" : r,
             "Collection" : R
         },
         "waitingForLock" : false,
         "numYields" : 46963,
         "lockStats" : {
             "Global" : {acquireCount : { r : 93928}},
             "MMAPV1Journal" : {acquireCount : { r : 46964} , acquireWaitCount : { r : 2 }, timeAcquiringMicros: { r : 2 } },
             "Database" : {acquireCount : { r : 46964}},
             "Collection" : {acquireCount : { r : 46964}}
         }
       }
   ]
}

而且在外壳程序上运行良好的查询(22毫秒)

db.collection.find({ParentId : 55, IsDeleted : false}).sort({_id : 1})

C#代码示例:

MongoClient client = new MongoClient("mongodb://MongosServer01:27017,MongosServer02:27017,MongosServer03:27017,MongosServer04:27017");
var collection = client.GetServer().GetDatabase("db").GetCollection<BsonDocument>("collection");
var cursor = collection.Find(Query.And(Query.EQ("ParentId" , 55),Query.EQ("IsDeleted" , false))).SetSortOrder("_id").SetLimit(20);

我认为您的差异与Doc的每种方法带来的数量有关。 MongoChef的默认值约为50,在您的代码中,您可能带了所有文档。

我希望你会发现它有用

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM