调整连接池设置
在此页面上
问题 | 解决方案 |
---|---|
应用程序端操作速度缓慢,未反映在数据库服务器日志或实时面板中。 | 使用 将 例如:如果某一成员的延迟为 10,000 毫秒,将 |
一个配置错误的防火墙错误地关闭了一个套接字连接,且驱动程序无法检测到此连接已被不当关闭。 | 使用 将 |
服务器日志或实时面板显示应用程序创建新连接的耗时过长。 | |
数据库的负载较低,且在任何时段活跃连接的数量都很少。应用程序在任一时间段执行的操作次数均少于预期。 | 增大 maxPoolSize,或增加应用程序或所用框架中的活动线程数。 |
数据库 CPU 使用率高于预期。服务器日志或实时面板显示的连接尝试次数多于预期。 | 减小 maxPoolSize 或减少应用程序中的线程数。这可以减少负载和响应时间。 |
警告
请勿使用 socketTimeoutMS
来防止长时间运行服务器的操作。请在查询中使用 maxTimeMS()
,这样服务器就可以取消长时间运行的操作。
计算最大连接数
计算使用量以查找每个连接运行的操作数。
假设有一个应用程序服务器连接到有三个节点的副本集。在这种情况下,该应用程序服务器会为每个副本集节点创建一个连接池。您还需要考虑每个客户端在每个节点上创建的用于监控的连接。
应用程序服务器打开的最大连接数基于 maxPoolSize
、节点数量以及每个节点的监控和 RTT 连接。
例如,您可以使用以下公式计算从应用程序到有三个节点的副本集的传出连接数:
( **100** {:urioption:`maxPoolSize`} + **1** monitoring connection + **1** RTT connection ) * 3 replica set members = **306** outgoing connections from the application.