首页/数据/NoSQL 速查/连接池与超时设置要点
本包目录(322 条)
MongoDB99 条Elasticsearch89 条ClickHouse56 条时序与列式28 条
选型与架构50 条

连接池与超时设置要点

客户端连接池限制并发与排队:MongoDB 驱动提供 maxPoolSize/minPoolSize/waitQueueTimeoutMS;ES 客户端维护每节点连接并在超时后重试;Redis 客户端一般复用少量长连接。连接、读写、整体超时要分层设置,重试配退避与幂等前提。

NoSQL 速查数据更新于 2026-10-12

连接参数示例

连接参数示例
# MongoDB 连接串参数
# mongodb://app:pwd@m1:27017,m2:27017/app?replicaSet=rs0\
#   &maxPoolSize=50&minPoolSize=5&waitQueueTimeoutMS=5000&serverSelectionTimeoutMS=3000

# Elasticsearch Python 客户端
from elasticsearch import Elasticsearch
es = Elasticsearch("http://es:9200", request_timeout=10, max_retries=3, retry_on_timeout=True)

# Redis 客户端
import redis
r = redis.Redis(host="127.0.0.1", port=6379, socket_timeout=1, socket_connect_timeout=0.5)
池容量核算服务实例数 × 每实例池上限 = 数据库侧连接总量,要低于服务端 maxConnections
排队池满后的请求在队列等待(waitQueueTimeoutMS),超时立刻失败好过无限堆积
重试只对幂等且瞬时错误重试,指数退避加抖动,避免故障时放大流量
客户端按进程复用同一实例:每个请求新建客户端会反复建连,既慢又可能耗尽连接与文件描述符。

易错点

  • 池上限按单实例配置却忽略了水平扩容后的总连接数,实例扩到几十个时打满数据库连接上限
  • serverless 与短生命周期进程每实例持有大连接池,会在并发峰值时连接数失控,需要下调上限或使用代理

数据来源与参考

  • MongoDB Manual: Connection pool monitoring
  • Elasticsearch Guide: Client settings
  • Redis Docs: Timeouts
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌