C# Mongo db updateOne查询挂起

C# Mongo db updateOne查询挂起,c#,mongodb,C#,Mongodb,我有一个c#应用程序,使用最新的驱动程序(2.3.0)读写MongoDB数据库。它正在处理来自事件队列的大量消息 根据这里的建议,MongoClient和IMongoCollection在我的IoC容器中绑定到应用程序的singleton范围内(它是单线程的) 大多数情况下,一切都很完美 在调用collection.UpdateOne时,驱动程序偶尔会(每几十万条消息中就有一条)完全锁定。它似乎永远不会从这个方法返回,没有CPU或内存的使用 导致锁定的查询看起来相当不起眼(例如与所有其他消息的格

我有一个c#应用程序,使用最新的驱动程序(2.3.0)读写MongoDB数据库。它正在处理来自事件队列的大量消息

根据这里的建议,MongoClient和IMongoCollection在我的IoC容器中绑定到应用程序的singleton范围内(它是单线程的)

大多数情况下,一切都很完美

在调用
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 }
}
在将我置于这种状态的驱动程序周围是否存在需要处理的错误情况?


我还可以做些什么来找到导致此问题的原因?

我建议启用分析以清楚地了解问题。@Saleem我运行了探查器,从C#失败的命令没有显示在探查器列表中。只是思想的食粮。您提到,当设置包含数千个元素的数组时,它将挂起。如果是这样的话,是不是该把文档一分为二了?请看@Saleem,我可以在同一个文档中将数组分割成块(我不想分割成单独的块,因为我需要它来进行原子写入)。说到这里,我真的很想知道为什么它会被挂起来,因为这可能是另一个需要修复的问题的症状。我们也遇到了这个问题。在数千次呼叫中,有一次会永远挂起更新小文档。内存转储表示线程卡在“MongoDB.Driver.Core.Misc.StreamExtensionMethods.ReadBytes”中的“System.Net.Sockets.Socket.Receive”中。即使是Thread.Abort()似乎也无法将其从挂起状态中拉出。