我有一个使用带有500,000个文档的mongoDB数据库的Web应用程序(ASP.NET)。有时查询(通过我在ASP.NET中创建的日志测量)需要2秒,有时我会得到 HttpException:Request timed out 。一旦花了70年代。当它超时(几分钟后),如果我在此之后立即重试,则需要2秒。
我使用C#mongoDB驱动程序,连接超时设置为15秒。这是否意味着延迟不是由实际查询引起的(否则超时会启动)? 可能是什么问题?
它似乎与特定查询无关。
答案 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/
希望我的回答很有帮助。