Database Manual / Administration / Performance / Connection Pool

Tuning Your Connection Pool Settings调整连接池设置

Problem问题Solution解决方案
Slow application-side operation times that are not reflected in the database server logs or the real time panel.数据库服务器日志或实时面板中未反映的应用程序端操作时间缓慢。

Use connectTimeoutMS to ensure the driver does not wait indefinitely during the connection phase.使用connectTimeoutMS确保驱动程序在连接阶段不会无限期等待。

Set connectTimeoutMS to a value greater than the longest network latency you have to a member of the set.connectTimeoutMS设置为大于该组成员的最长网络延迟的值。

For example: if a member has a latency of 10000 milliseconds, setting connectTimeoutMS to 5000 (milliseconds) prevents the driver from connecting to that member.

A misconfigured firewall closes a socket connection incorrectly and the driver cannot detect that the connection closed improperly.配置错误的防火墙会错误地关闭套接字连接,驱动程序无法检测到连接关闭不当。

Use socketTimeoutMS to ensure that sockets are always closed.

Set socketTimeoutMS to two or three times the length of the slowest operation that the driver runs.

The server logs or real time panel show that the application spends too much time creating new connections.服务器日志或实时面板显示应用程序在创建新连接上花费了太多时间。

Not enough connections are available at startup. Allocate connections in the pool by setting minPoolSize.

Set minPoolSize to the number of connections you want to be available at startup.minPoolSize设置为启动时可用的连接数。

The MongoClient instance ensures that number of connections exists at all times.MongoClient实例确保始终存在一定数量的连接。

The load on the database is low and there's a small number of active connections at any time. Application performs fewer operations at any one time than expected.数据库的负载很低,任何时候都有少量活动连接。应用程序在任何时候执行的操作都比预期的少。Increase maxPoolSize, or increase the number of active threads in your application or the framework you are using.
Database CPU usage is higher than expected. The server logs or real time panel show more connection attempts than expected.数据库CPU使用率高于预期。服务器日志或实时面板显示的连接尝试次数比预期的多。Decrease the maxPoolSize or reduce the number of threads in your application. This can reduce load and response times.

Warning

Do not use socketTimeoutMS to prevent long-running server operations. Instead, use maxTimeMS() with queries so that the server can cancel long-running operations.不要使用socketTimeoutMS来防止长时间运行的服务器操作。相反,在查询中使用maxTimeMS(),这样服务器就可以取消长时间运行的操作。

Calculate Maximum Number of Connections计算最大连接数

Calculate usage to find the number of operations running for each connection.计算使用情况,以找到每个连接运行的操作数。

Consider four application servers connecting to a replica set with three members. In this scenario, each of the four application servers creates a connection pool for each replica set member.考虑四个应用程序服务器连接到一个有三个成员的副本集。在这种情况下,四个应用程序服务器中的每一个都会为每个副本集成员创建一个连接池。

Calculate the maximum number of connections that are opened by each application server by multiplying maxPoolSize by the number of members.通过将maxPoolSize乘以成员数来计算每个应用程序服务器打开的最大连接数。

Calculate outgoing connections from an application to a three-member replica set:计算从应用程序到三成员副本集的传出连接:

100 (maxPoolSize default 100) x 3 (replica set members) = 300 (outgoing connections from the application).

Calculate incoming connections from four application servers to a replica set:计算从四个应用程序服务器到副本集的传入连接:

100 (maxPoolSize default 100) x 4 (application servers) = 400 (incoming connections to each mongod).