Mongodb 将mongorestore用于oplog replay与--numInsertionWorkersPerCollection/同时将mongorestore用于oplog replay

Mongodb 将mongorestore用于oplog replay与--numInsertionWorkersPerCollection/同时将mongorestore用于oplog replay,mongodb,concurrency,mongorestore,mongodb-oplog,Mongodb,Concurrency,Mongorestore,Mongodb Oplog,如果我将mongorestore与--numInsertionWorkersPerCollection>1一起用于oplogreplay,则不会带来任何性能改进。我有一台8核的机器,内存为64 GB,我的完整oplog大小约为1 GB(在同一个集合上约有100万个请求)。所以我不认为硬件是这里的限制。请告诉我背后的原因 基本上,我是在比较mongorestore和sync(用于更新辅助服务器上的oplog)。在同步的情况下,我们有默认的16个工作进程,可以同时应用opLog,我希望我也可以对mo

如果我将mongorestore与--numInsertionWorkersPerCollection>1一起用于oplogreplay,则不会带来任何性能改进。我有一台8核的机器,内存为64 GB,我的完整oplog大小约为1 GB(在同一个集合上约有100万个请求)。所以我不认为硬件是这里的限制。请告诉我背后的原因


基本上,我是在比较mongorestore和sync(用于更新辅助服务器上的oplog)。在同步的情况下,我们有默认的16个工作进程,可以同时应用opLog,我希望我也可以对mongorestore执行同样的操作。

numInsertionWorkersPerCollection仅在插入数据时工作,而不重放opLog


从mongorestore源代码看,oplogReplay是单线程的,所以并行replay不起作用。

谢谢您提供的信息@JJussi:)。但是,您如何解释同步期间,oplog重放比mongorestore oplog重放发生得更快呢。我断开了辅助服务器与副本集的连接,然后在主服务器上执行了大约1m的操作。现在,我在不使用副本集的情况下运行secondary(即不使用--replSet setName),并使用mongorestore oplog replay对其应用oplog。这又花了大约4分钟,我执行了相同的实验,但现在我只需再次连接辅助设备和主设备(即--replSet setName),大约花了1分钟。如此巨大的差异背后的原因是什么?不同的代码。不同的程序员。我还没有检查mongod关于opLog replay的代码,但是现在它可以并行。在wiredTiger引擎出现之前,mongod也是单线程的。不同之处可能在于,数据已经在内存中,并从内存中重放。甚至我认为这是内存中的原因,所以我使用“mount-t tmpfs-o size=5000M none'filename'”将转储文件保存在内存中,并在其上执行mongorestore。这只会带来一点变化。此外,我还尝试为oplog replay与不同数量的工作线程进行同步(即使用--setParameter replWriterThreadCount=x),以查看一个线程是否与mongorestore等效,但仍然没有成功。这比蒙哥里斯托雷好多了(请分享您对它的见解,或者让我知道合适的资源,我可以在那里阅读和了解更多关于它的信息。)非常感谢!:)