Mongo db updateOne查询挂起

时间:2016-10-06 00:12:59

标签: c# mongodb

我有一个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 }
}

我是否需要处理导致我进入此状态的驱动程序的错误情况?

我还能做些什么来找到造成这种情况的原因?

0 个答案:

没有答案