加载中...
数据库连接池是在应用层维护一组预建立数据库连接的缓存机制,避免每次请求都重新建立 TCP 连接和数据库握手的巨大开销。连接池的配置直接影响数据库性能和稳定性,是后端服务与数据库之间的关键中间层。

| 类型 | 数据库访问中间层 |
| 常见实现 | HikariCP(Java)、PgBouncer(PG)、ProxySQL(MySQL) |
| 核心参数 | min/max pool size、connection timeout、idle timeout |
建立一个 MySQL 连接包括:TCP 三次握手、TLS 握手(如果加密)、数据库认证、session 初始化——整个过程在局域网内通常需要1-5毫秒。对于每秒处理数百甚至数千请求的 Web 服务,如果每次请求都新建连接,光是连接开销就会消耗大量时间,更严重的是,大量并发的短连接会让数据库的连接管理线程不堪重负。
连接池的做法是启动时创建一批连接放在池中,请求到来时从池中借出一个空闲连接,请求完成后归还而非关闭,下一个请求直接复用。一个配置了100个连接的连接池,可以支撑远超100的并发请求(因为大多数请求的数据库操作只占总时间的一小部分)。[1]
连接池的核心参数是最大连接数(max pool size)。数据库自身有最大连接数上限(MySQL 默认151),多个应用实例同时运行时,需要保证所有实例的连接池总大小不超过数据库上限,否则新建连接会被拒绝。

| 类型 | 数据库访问中间层 |
| 常见实现 | HikariCP(Java)、PgBouncer(PG)、ProxySQL(MySQL) |
| 核心参数 | min/max pool size、connection timeout、idle timeout |
登录 后参与讨论
暂无讨论,来发表第一条评论吧