2014-09-02 85 views
0

我在某处有僵尸吗?在脚本退出后,Mongo继续缓慢插入文档

我的脚本完成插入大量的新数据。

但是,服务器继续保持高锁定率并缓慢插入新记录。大约一个小时后,插入的脚本完成了,文档仍在流入。

这些来自哪里以及如何清除队列? (I重构的代码使用一个索引,并希望重新进行处理,以避免100-200%锁率)

+2

您的脚本在插入时是否使用未确认的写入?如果是这样,实际插入可能发生在您的脚本完成后。 – JohnnyHK 2014-09-02 01:57:01

+0

使用db.currentOp()来检查正在执行的操作。不安全模式写入可能导致这种情况。 – 2014-09-02 07:48:36

回答

1

这可能是因为以下情况下的,

1..Throughput绑定磁盘IO

一个可以考虑以下指标使用“mongostat”和“MongoDB的管理服务”:

  • 平均冲洗时间(MongoDB的周期性同步多久盘在硬件选项卡取)
  • IOStats(看具体IOWAIT)

由于磁盘IO比CPU处理时间慢,所有的插入得到排队,这样就可以持续更长的时间,可以检查使用db.serverStatus()的服务器状态并查看与锁相关联的“currrentQueue”的“globalLock”(作为Write获取全局锁)字段以查看队列中的作者数。

2..Another可能的原因是管理的碎片化集群平衡已经摆在状态(这是默认情况下)

如果你一直在集群环境中,每当写操作开始平衡器自动打开,以保持群集处于平衡状态,即使脚本完成后,平衡器也可以继续将块从一个碎片移动到另一个碎片。在这种情况下,我宁愿建议在批量装载时保持平衡器关闭,在这种情况下,所有文件都会放在单个碎片上,但平衡器可以在任何停机时间被踢出。

3..Write关注 这也可能会导致问题咯,如果它们被设置为副本已确认或确认模式,它取决于你,根据你的类型的数据,对这些问题决定。