使用MongoDB C#驱动程序对大型文档进行极慢的反序列化

时间:2014-03-07 13:31:11

标签: mongodb mongodb-.net-driver

我使用10个线程对大型文档进行查找和修改(每个线程上一次一个文档)。这些文档每个大约600kB,每个包含10,000个元素数组。客户端和MongoDB服务器位于数据中心的同一LAN上,并通过非常快速的连接进行连接。客户端在小型机器上运行(CPU相当慢,768 MB的RAM)。

问题是每次查找和修改操作都非常慢。

例如,这里是一个操作的时间轴:

  • 11:56:04:在客户端调用FindAndModify。
  • 12:05:59:操作记录在服务器上(“responseLength”:682598,“millis”:7),所以服务器几乎立即返回。
  • 12:38:39:FindAndModify在客户端上返回。

机器上的CPU使用率仅为10-20%,但内存似乎不足。可用字节性能计数器大约为40 MB,调用MongoDB的进程的专用字节数为800 MB(超过计算机上的物理RAM)。 Page / sec性能计数器也徘徊在4,000左右。

我的理论是,驱动程序需要33分钟来反序列化文档,这可能是因为操作系统由于大文档反序列化到CLR对象而导致内存使用率过高而进行交换。尽管如此,这并没有真正解释为什么在调用FindAndModify和服务器端执行之间花了10分钟。

这种情况有多大可能性?你有其他理论吗?我该如何验证是这种情况?

0 个答案:

没有答案