我使用10个线程对大型文档进行查找和修改(每个线程上一次一个文档)。这些文档每个大约600kB,每个包含10,000个元素数组。客户端和MongoDB服务器位于数据中心的同一LAN上,并通过非常快速的连接进行连接。客户端在小型机器上运行(CPU相当慢,768 MB的RAM)。
问题是每次查找和修改操作都非常慢。
例如,这里是一个操作的时间轴:
机器上的CPU使用率仅为10-20%,但内存似乎不足。可用字节性能计数器大约为40 MB,调用MongoDB的进程的专用字节数为800 MB(超过计算机上的物理RAM)。 Page / sec性能计数器也徘徊在4,000左右。
我的理论是,驱动程序需要33分钟来反序列化文档,这可能是因为操作系统由于大文档反序列化到CLR对象而导致内存使用率过高而进行交换。尽管如此,这并没有真正解释为什么在调用FindAndModify和服务器端执行之间花了10分钟。
这种情况有多大可能性?你有其他理论吗?我该如何验证是这种情况?