我有一个c#应用程序使用最新的驱动程序(2.3.0)读取和写入MongoDB数据库。它正在处理来自事件队列的大量消息。
MongoClient和IMongoCollection在我的IoC容器中以单一作用域绑定到应用程序(单线程),按照此处的建议http://mongodb.github.io/mongo-csharp-driver/2.3/reference/driver/connecting/
大部分时间一切都很完美。
非常偶尔(每隔几十万条消息中就有一条)驱动程序在调用collection.UpdateOne
时完全锁定。它似乎永远不会从这种方法返回,没有CPU或内存使用。
导致锁定的查询显得非常不起眼(例如,与所有其他消息的格式相同)。我唯一注意到的是,在这两种情况下我都观察到它的查询相当大,因为它设置了一个包含数千个元素的数组。
{
"$addToSet": {
"Events": {
"Timestamp": ISODate("2007-06-10T21:33:45Z"),
"CorrelationKey": CSUUID("a0dacaf9-2ea9-4bbd-bb26-abdc99961438"),
"GroupIds": [ ]
}
},
"$set": {
"Spans": [
{
"GroupId": 1166,
"From": ISODate("2007-06-10T21:31:43Z"),
"To": ISODate("2007-06-10T21:33:45Z")
},
....
{
"GroupId": 33549,
"From": ISODate("2007-06-10T21:31:43Z"),
"To": ISODate("2007-06-10T21:33:45Z")
}
]
},
"$inc": { "Version": 1 }
}
我是否需要处理导致我进入此状态的驱动程序的错误情况?
我还能做些什么来找到造成这种情况的原因?