2011-05-09 103 views
8

我们有2个副本集的集群,每集有3个服务器。一个集合被分割。我们还有一些我们每天使用的更多(8+)收藏品。大部分数据都在分片集合中,其中有近1亿条记录。MongoDB游标在执行大量写入操作时超时

最近我们增加了获取我们之前获得的数据100倍的要求,我们需要将其写入到mongodb中。一个守护进程已经设置好来执行必要的写操作,以保持数据库处于最新状态。该脚本每秒钟执行超过200次写作,大多数都会进入所有单独的集合。

有了这么多的写入量,我们就无法执行大量的读取操作来进行分析。接收Cursor Timeouts客户端和服务器端的组合(“未找到光标”)。

我们试图对读取进行限制/跳过方案,但问题仍然存在。由于我们既需要大量的写入,又需要大量的读取,因此需要采取什么行动来纠正这种情况?

回答

3

通常情况下,在这种情况下,您希望开始查看导致时间的查询。然后你想看看硬件,看看有什么压力。

  1. 这些查询是否正确编入索引?
  2. 指数有多大?它们适合RAM吗?
  3. 你能提供一些关于瓶颈位置的细节吗?
  4. 你锁定在IO上吗?
  5. 您的处理器是否全速运行?

另外,在日志中有什么不寻常的东西吗?

基本上,我们需要确保您有: 1.正确构建的系统处理查询 2.正确配置系统处理的数据量

+0

1.我们只查询我们与_id读领域。 2.我们的索引只比内存大小稍大,我们的EC2实例有7.5 GB,我们的索引每个replSet为9.5 GB。我们目前正在升级到32 GB的主人。 3.我看不到任何瓶颈,只是问题是完全读取数据。 4.我们通常是写锁定在采取最多写入的集合,但否则我们很好。 5.我们的处理器根本没有太大的压力。 – Bryan 2011-05-09 19:27:14

+0

iostat和mongostat的外观如何?你在EBS硬盘上运行吗?搜查?他们的表现如何? – 2011-05-09 19:44:10

+0

mongostat显示锁定的百分比浮动在90%左右,更新占主导地位。我们目前正在对主人和EBS进行二次备份。 iostat在622和365处显示写入/秒的读取/秒,读取可能很高,因为我们目前正在恢复2台32GB服务器。 – Bryan 2011-05-09 19:59:52