我在某处有僵尸吗?在脚本退出后,Mongo继续缓慢插入文档
我的脚本完成插入大量的新数据。
但是,服务器继续保持高锁定率并缓慢插入新记录。大约一个小时后,插入的脚本完成了,文档仍在流入。
这些来自哪里以及如何清除队列? (I重构的代码使用一个索引,并希望重新进行处理,以避免100-200%锁率)
我在某处有僵尸吗?在脚本退出后,Mongo继续缓慢插入文档
我的脚本完成插入大量的新数据。
但是,服务器继续保持高锁定率并缓慢插入新记录。大约一个小时后,插入的脚本完成了,文档仍在流入。
这些来自哪里以及如何清除队列? (I重构的代码使用一个索引,并希望重新进行处理,以避免100-200%锁率)
这可能是因为以下情况下的,
1..Throughput绑定磁盘IO
一个可以考虑以下指标使用“mongostat”和“MongoDB的管理服务”:
由于磁盘IO比CPU处理时间慢,所有的插入得到排队,这样就可以持续更长的时间,可以检查使用db.serverStatus()的服务器状态并查看与锁相关联的“currrentQueue”的“globalLock”(作为Write获取全局锁)字段以查看队列中的作者数。
2..Another可能的原因是管理的碎片化集群平衡已经摆在状态(这是默认情况下)
如果你一直在集群环境中,每当写操作开始平衡器自动打开,以保持群集处于平衡状态,即使脚本完成后,平衡器也可以继续将块从一个碎片移动到另一个碎片。在这种情况下,我宁愿建议在批量装载时保持平衡器关闭,在这种情况下,所有文件都会放在单个碎片上,但平衡器可以在任何停机时间被踢出。
3..Write关注 这也可能会导致问题咯,如果它们被设置为副本已确认或确认模式,它取决于你,根据你的类型的数据,对这些问题决定。
您的脚本在插入时是否使用未确认的写入?如果是这样,实际插入可能发生在您的脚本完成后。 – JohnnyHK 2014-09-02 01:57:01
使用db.currentOp()来检查正在执行的操作。不安全模式写入可能导致这种情况。 – 2014-09-02 07:48:36