MongoDB:在副本集中执行写入操作期间阻止查询

MongoDB:在副本集中执行写入操作期间阻止查询,mongodb,performance,Mongodb,Performance,我将MongoDB(3.0)与3台服务器的副本集一起使用。一周以来,我的查询速度非常慢,我一直试图找出服务器上的错误 通过使用db.currentOp()命令,我可以看到,当“复制工作程序”运行时,查询有时会在辅助设备上被阻塞。所有查询都在等待锁定(“waitingForLock”:true),而且复制工作进程似乎已经获得了该锁定,并且已经运行了几分钟(似乎很长) 为了更具体地说明我的用户案例,我在副本集中有多个数据库,所有这些数据库都包含相同的集合,但数据量不同(我为每个客户机使用一个数据库)

我将MongoDB(3.0)与3台服务器的副本集一起使用。一周以来,我的查询速度非常慢,我一直试图找出服务器上的错误

通过使用
db.currentOp()
命令,我可以看到,当“复制工作程序”运行时,查询有时会在辅助设备上被阻塞。所有查询都在等待锁定(
“waitingForLock”:true
),而且复制工作进程似乎已经获得了该锁定,并且已经运行了几分钟(似乎很长)

为了更具体地说明我的用户案例,我在副本集中有多个数据库,所有这些数据库都包含相同的集合,但数据量不同(我为每个客户机使用一个数据库)

我使用WiredTiger作为一个存储引擎,通常(正如doc声称的那样)不使用全局锁。因此,如果更新此集合,我希望特定集合上的查询会很慢,但我不希望所有查询都很慢或被阻止

有没有人经历过同样的问题?当进程在数据库中写入时执行读取时,MongoDB是否有一些限制

此外,有没有办法告诉MongoDB我不关心读取操作的一致性(以避免锁定)

谢谢

更新:

通过重新启动服务器,问题消失了。内存和cpu使用率似乎在增长(但仍然很低),这导致复制过程变慢,从而导致锁定并阻止查询执行


我还是不明白为什么这个数据库有问题。也许版本3.0.9有一个bug(我将升级到3.0.12)。不过,数据库运行速度非常慢,需要一个月的时间,只有重新启动所有服务器才能解决问题。我们的工作负载主要是写操作(使用findAndModify)。有人知道Mongo中存在一个bug,密集写入会导致性能随时间下降吗?

如果您对不太一致的结果感到满意,那么您可能可以将quorum值设置为“一”。这将用于从节点进行读取,而不会使用其他副本对其进行验证。这将有助于在一定程度上减少您的问题。谢谢您的提示,但我不确定我是否理解您的意思。如何更改读取的仲裁设置(我是mongodb新手)?@vespasien您找到解决此问题的方法了吗?没有,我们仍然避免在读取操作期间进行过多写入。