根据文档, fsync with lock=true 应该阻止写入。但值得注意的是,尽管它阻止了写入,但它仍在写入。这是预期的行为吗?
我在我的机器上本地安装了 MongoDB,并将其作为单节点副本集运行。正在使用的 MongoDB 版本是 4.2.11
我执行 fsync 如下所示。
然后执行 fsync 解锁。
预计写入不会起作用,但它会以任何方式持续存在。fsync 有问题吗?
当您关闭被阻止的插入(例如,通过 control+ C 或任何其他机制)但不知何故进程没有停止并且在您运行 unblock fsync 之后,命令仍然在后台执行并被插入或当插入命令被阻止,然后您运行 unblock fsync ,这使块插入自动解除阻止。我在 v 4.4.10(比您的版本更高)上对此进行了测试,并且根据文档可以正常工作。
首先插入一条记录
然后使用 fsync
然后尝试再插入一条记录,该记录将被阻止并随后使用 Ctrl + C 杀死
然后解锁 fsync
验证第二次插入是否成功(这是预期的行为)
您还可以检查前后的 db.serverStatus() 以查看服务器接受的“插入”命令的差异。这可以为您提供有关命令是否以某种方式到达的提示。信息看起来像这样