16

我在我的 nodejs 应用程序中使用猫鼬,我想知道我应该将 poolSize 设置为什么。我知道可能没有硬性规定,但可能基于用户和使用情况有一个一般性建议。

我将 poolSize 保留为默认值 5。在某些时候,我可以让服务器处于负载状态,看看 5 的性能如何。然后我可以开始真正提高它(100、500、1000 等),看看会发生什么。还有其他人尝试过这个并愿意分享吗?

4

2 回答 2

4

这个链接可以帮助你。很难预测 MongoDb 的最佳池大小,我使用apache 基准测试来测试服务器性能和对不同 poolSize 值的响应,并获得最适合服务器给定并发请求数量的近似值。

于 2013-11-04T01:47:57.287 回答
0

连接池大小是维护的数据库连接缓存,因此当将来需要对数据库的请求时,可以重用这些连接。连接池用于提高在数据库上执行命令的性能。

注意: maxPoolSizepoolSize是相同的,除了它们与您是否使用该useUnifiedTopology: true设置有关。如果您使用useUnifiedTopology: true,maxPoolSize是符合规范的设置来管理连接池的大小。但是如果你使用useUnifiedTopology: false(或省略它),poolSize是同一件事,但在我们有统一的拓扑之前。

注意:每个连接消耗大约 1MB 的 RAM。

池大小的值

连接池基于每个 mongod/mongos,因此当连接到 3 成员副本时,将有三个连接池(每个 mongod 一个),每个连接池带有maxPoolSize. 此外,每个节点还需要一个监控连接,因此您最终会得到(maxPoolSize+1)*number_of_nodesTCP 连接。

在我看来,如果你不关心 CPU 和 RAM,你应该使用所有可用的连接(如果我们已经有了它们,为什么不呢,对吧?)。

例如:您有具有 3 个副本集的 Atlas free 集群,最多支持 500 个连接,并且您只有一个连接到它的应用程序,将所有连接都提供给该应用程序。为了设置 的值poolSize,您可以使用上面的连接计算:

poolSize = (maximum_connections/number_of_nodes) - 1

poolSize = (500/3) - 1

poolSize = 165

如果您有 2 个应用程序将连接到同一个集群,请给每个应用程序一半的连接。

如果您的 RAM 内存有限,请检查您可以计算多少poolSize(正如我在注释中所说,您可以假设一个连接将消耗大约 1MB 的 RAM)。

于 2021-12-20T08:45:46.763 回答