MongoDb请求可能需要2秒到70秒

时间:2017-03-23 01:03:09

标签: asp.net mongodb

我有一个使用带有500,000个文档的mongoDB数据库的Web应用程序(ASP.NET)。有时查询(通过我在ASP.NET中创建的日志测量)需要2秒,有时我会得到 HttpException:Request timed out 。一旦花了70年代。当它超时(几分钟后),如果我在此之后立即重试,则需要2秒。

我使用C#mongoDB驱动程序,连接超时设置为15秒。这是否意味着延迟不是由实际查询引起的(否则超时会启动)? 可能是什么问题?

它似乎与特定查询无关。

1 个答案:

答案 0 :(得分:0)

要验证mongodb中查询的性能,可以使用mongodb提供的性能测量工具。

可以通过将参数直接传递给mongodb来模拟您的查询,并执行explain函数以获得一些见解(在查询中花费的时间就是其中之一)。

例如,假设有一个类似的东西:

{ "_id" : 1, "item" : "f1", type: "food", quantity: 500 }
{ "_id" : 2, "item" : "f2", type: "food", quantity: 100 }
{ "_id" : 3, "item" : "p1", type: "paper", quantity: 200 }
{ "_id" : 4, "item" : "p2", type: "paper", quantity: 150 }
{ "_id" : 5, "item" : "f3", type: "food", quantity: 300 }
{ "_id" : 6, "item" : "t1", type: "toys", quantity: 500 }
{ "_id" : 7, "item" : "a1", type: "apparel", quantity: 250 }
{ "_id" : 8, "item" : "a2", type: "apparel", quantity: 400 }
{ "_id" : 9, "item" : "t2", type: "toys", quantity: 50 }
{ "_id" : 10, "item" : "f4", type: "food", quantity: 75 }

并执行以下查询:

db.inventory.find( { quantity: { $gte: 100, $lte: 200 } } )

要获得执行时间,可以执行以下操作:

db.inventory.find(
   { quantity: { $gte: 100, $lte: 200 } }
).explain("executionStats")

引用的命令将返回类似于此的内容:

{
   "queryPlanner" : {
         "plannerVersion" : 1,
         ...
         "winningPlan" : {
            "stage" : "COLLSCAN",
            ...
         }
   },
   "executionStats" : {
      "executionSuccess" : true,
      "nReturned" : 3,
      "executionTimeMillis" : 0,
      "totalKeysExamined" : 0,
      "totalDocsExamined" : 10,
      "executionStages" : {
         "stage" : "COLLSCAN",
         ...
      },
      ...
   },
   ...
}

从结果中可以看出, executionTimeMillis 可能是正在寻找的参数。此示例取自手册。人们可以在那里更好看: https://docs.mongodb.com/manual/tutorial/analyze-query-plan/

话虽如此,索引一个集合可以提高查询性能,我建议看一下以下链接: https://docs.mongodb.com/manual/indexes/

希望我的回答很有帮助。