MongoDB C#查询性能比mongotop报告差得多

MongoDB C#查询性能比mongotop报告差得多,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我在Mongo方面有很多经验,但对于这个问题,我几乎要落泪了(当然,这是在发行前一天不知从哪里冒出来的) 基本上,我是通过查询数据库来检索文档的,但它通常比它应该的要差一个数量级(甚至两个数量级),特别是因为查询没有返回任何内容 查询: //searchQuery ex: { "atomic.Basic^SessionId" : "a8297898-7fc9-435c-96be-9c5e60901e40" } var doc = FindOne(searchQuery); 说明: {

我在Mongo方面有很多经验,但对于这个问题,我几乎要落泪了(当然,这是在发行前一天不知从哪里冒出来的)

基本上,我是通过查询数据库来检索文档的,但它通常比它应该的要差一个数量级(甚至两个数量级),特别是因为查询没有返回任何内容

查询:

//searchQuery ex: { "atomic.Basic^SessionId" : "a8297898-7fc9-435c-96be-9c5e60901e40" }
var doc = FindOne(searchQuery); 
说明:

{
   "cursor":"BtreeCursor atomic.Basic^SessionId",
   "isMultiKey" : false, 
   "   n":0,
   "nscannedObjects":0,
   "nscanned":0,
   "nscannedObjectsAllPlans":0,
   "nscannedAllPlans":0,
   "scanAndOrder":false,
   "indexOnly":false,
   "nYields":0,
   "nChunkSkips":0,
   "millis":0,
   "indexBounds":{
      "atomic.Basic^SessionId":[
         [
            "a8297898-7fc9-435c-96be-9c5e60901e40",
            "a8297898-7fc9-435c-96be-9c5e60901e40"
         ]
      ]
   }
}
这通常需要50-150毫秒,尽管mongotop报告的读取时间最多为15毫秒(这应该超过几个查询)。数据库中只有6k个文档(索引中只有2k左右,解释说它正在使用索引),而且由于正在搜索的文档不存在,因此不可能出现反序列化问题

每一个查询(大多数情况下都是子ms)都没有那么糟糕,当然B-树不够大,没有那么大的差异


任何想法都会得到我永远的感激

MongoTop未报告总查询时间。它报告MongoDB持有特定锁的时间

根据解释,该查询在0毫秒内返回(速度非常快)。您所描述的内容听起来像是网络延迟。ping节点时的延迟是多少?网络可能是片状的吗


您使用的是哪个版本的MongoDB?考虑将MunGDB和C驱动程序升级到最新的稳定版本。

这可能是线程问题吗?我删除了数据库,虽然没有条目,但仍然要花很多时间!正在从未在其上创建集合的线程调用该集合,但调用新的GetCollection也不会帮助您。如果您使用的是windows,windows上的MongoDB通常比其他操作系统慢。根据MongoDB C#驱动程序,它的性能应该与Java等其他托管语言类似(除非查询是使用泛型的强类型查询,否则性能可能会非常不同)。包含lambda表达式的linq查询速度也较慢。是否在导线级别测量150ms?(您可以尝试wireshark或某些网络嗅探器,查看从查询端到tcp级别的查询响应是否消耗了查询/响应时间,如果没有,则可能是您的驱动程序或应用程序造成了延迟。)您是否在shell中尝试了查询?它表现出同样的行为吗?您的实验是否依赖于来自“冷”应用程序状态的单个查询快照?(可能与首次建立mongo服务器、replset连接等有关)