跳到正文

连接池

Connection Pool

高级通用

连接池(Connection Pool)是应用预先建立并重复使用的一组数据库连接,请求需要访问数据库时从中借用,用完归还。因为建立连接有开销、数据库能承受的连接数也有限,它能减少反复建连,并控制同时使用的连接数。

你可能会说:「网站一忙起来就反复连接数据库,速度变慢。我想让请求复用连接,同时别把数据库撑满。」

读之前建议先了解(这是一个高级概念)

动手看看

借用下单服务连接池占用1/2订单数据库
1

下单服务要查订单,先向连接池借一条空闲连接。池里已经备好了连接,不必为这次请求重新建立。

要点

  1. 1

    借到连接才能访问数据库

    你做一个订单后台,多个请求可能同时查订单。每个请求访问数据库前从池里借一条连接,操作结束后归还,下一次请求就能继续用。归还的是连接,不是把查询结果留给别人。

  2. 2

    连接数量和等待时间要受控

    池里的连接不是越多越好,因为数据库也有连接上限。连接都被借走时,新请求通常要等待空闲连接;等得太久则会超时。设置池大小时,要一起看数据库容量和应用实例数量。

  3. 3

    用完归还也包括失败路径

    如果请求报错后没归还连接,池会逐渐被占满,后来的请求只能等待。让 AI Agent 实现时,你可以让它检查正常返回、异常和事务结束时是否都会释放连接。

容易混淆的地方

连接池管理的是数据库连接,不是缓存:缓存保存可复用的数据,命中时可能根本不用查数据库;连接池仍然会执行查询。它也不是全站共用的一条连接:多个请求可以借用池中不同的连接。多个应用实例通常各有自己的池,所以总连接数要合起来看。

什么时候用

适合用

  • 做电商后台或 SaaS 网站,多个用户会同时读取、修改数据库中的数据,适合让请求复用连接。
  • 部署了多个后端实例,每个实例都频繁查询数据库,需要控制各实例的池大小,避免总连接数过高。
  • 做持续运行的消息消费者,处理每条消息都要写数据库,复用连接可减少反复建连。

不适合用

  • 页面只展示构建时生成的静态内容,运行时不访问数据库,就不需要连接池;直接提供静态文件即可。
  • 一个只运行一次、顺序执行少量查询的本地脚本,直接建立连接并在结束时关闭,通常比引入连接池简单。

练一练

你的订单后台有多个后端实例。流量上来后,数据库连接数接近上限,但每个实例的连接池看起来都没满。下一步更合理的是?

让 AI 帮你做

请检查这个后端访问数据库的方式:如果请求中频繁新建连接,请改为使用连接池,并说明池大小、等待超时如何配置。检查正常返回和报错时连接是否都会归还;如果有多个应用实例,也请估算它们合计可能占用的连接数。

接下来学什么