文档中心 关系型数据库(KRDS) 云数据库MySQL 数据库代理 使用数据库代理 设置连接池

设置连接池

最近更新时间:2026-01-13 13:16:15

连接池

数据库代理内置连接池机制,支持后端数据库连接的复用,减少代理直连数据库的连接数量。在短连接较多或连接创建频繁的场景下,可有效避免频繁建连带来的资源消耗,显著降低数据库侧负载。

连接池类型

在数据库代理架构中,连接被拆分为两个层次:

  • 前端连接:客户端与数据库代理之间建立的会话连接

  • 后端连接:数据库代理与后端 MySQL 实例之间的物理连接

客户端建立会话时,代理仅创建前端连接,不会立即分配后端连接;只有在执行 SQL 或事务时,才会从连接池中获取后端连接。

根据后端连接的获取与释放粒度不同,RDS MySQL 数据库代理支持两种连接池模式:事务级连接池和会话级连接池。您可根据业务访问模式和资源使用情况,选择是否启用连接池及其类型。

连接池类型

使用场景

事务级连接池(默认)

适用于短连接、连接创建频繁且数量达到MySQL数据库连接数限制的场景。

前提:业务不涉及事务级连接池的使用限制。

会话级连接池

适用于长连接、连接数量少、连接上请求密集的场景。

事务级连接池

事务级连接池以请求 / 事务粒度获取和释放后端数据库连接,实现高效的连接复用与资源控制。

1)适用场景

  • 业务以短连接为主

  • 客户端频繁建立和释放连接

  • 总连接数较大,接近或达到 MySQL 实例连接数上限

2)核心作用

  • 降低连接建立开销:减少应用与数据库之间频繁建连带来的认证、握手等成本,降低 MySQL 主线程压力

  • 减少数据库连接数:在客户端请求不密集的情况下,显著降低数据库实例上的总连接数量

3)工作原理

从事务级连接池获取连接的具体流程如下:

每次开始新的请求/事务时:

  • 若存在可复用后端连接,代理直接从连接池中获取后端连接执行当前请求或事务;事务结束后,连接归还至连接池,供后续会话复用。

  • 若不存在可复用后端连接,代理动态创建新的后端连接处理请求,并在事务完成后将其纳入连接池统一管理。

通过该机制,多个前端会话可共享有限数量的后端连接,从而显著提升资源利用率。

主要优势:

  • 降低连接创建成本:后端连接保持长生命周期,避免频繁的 TCP 握手和认证过程,减少数据库 CPU 与网络开销

  • 优化资源使用效率:通过连接复用,显著减少数据库实例上的总连接数,避免大量空闲连接占用内存和线程资源

4)使用限制

开启事务级连接池后,在以下场景中,后端连接将被独占使用,直至连接释放。在此期间不会归还至连接池,其行为等同于会话级连接池,以保证语义正确性和事务一致性:

  • 执行 PREPARE 语句或相关命令

  • 创建临时表

  • 创建或使用用户变量

  • 执行 LOCK TABLE、LOCK TABLES、FLUSH TABLES WITH READ LOCK 且未执行 UNLOCK TABLES

  • 调用 GET_LOCK() 函数(该连接在整个会话期间不再复用)

  • 执行包含 SQL_CALC_FOUND_ROWS 的语句

此外,还需注意以下限制与行为差异:

  • 函数兼容性限制FOUND_ROWS()、ROW_COUNT()、LAST_INSERT_ID() 等函数可正常调用,但在连接复用场景下,无法保证返回结果的准确性。

  • wait_timeout 行为差异当后端连接因 wait_timeout 超时被关闭时,仅影响连接池中的后端连接,不会直接断开客户端与代理之间的前端连接。

  • 连接标识说明由于后端连接可被复用,SELECT CONNECTION_ID() 返回的是当前后端连接对应的线程 ID。

  • processlist 显示差异受连接复用机制影响,SHOW PROCESSLIST 中展示的 IP 和端口信息,可能与客户端实际地址不一致。

会话级连接池

会话级连接池以会话粒度获取和释放后端数据库连接。相较于事务级连接池,其连接分配粒度更粗,连接复用能力相对较低。

1)适用场景

  • 业务以长连接为主

  • 连接数量相对较少,且单连接上的请求较为密集

2)核心作用

  • 降低连接建立开销:减少应用与数据库之间频繁建连带来的认证、握手等成本,降低 MySQL 主线程负载

3)工作原理

会话级连接池的整体机制与事务级连接池类似,不同之处在于后端连接的占用周期。

当客户端建立会话并发起首个请求时:

  • 存在可复用后端连接,代理从连接池中获取一个后端连接,并绑定至该会话,用于后续所有请求。

  • 不存在可复用后端连接,代理动态创建新的后端连接处理请求,并将其绑定到当前会话。

在整个会话生命周期内,该会话始终独占一个后端连接;会话结束、前端连接断开后,后端连接才会被归还至连接池,供后续会话复用。

说明:在会话未结束前,即使该会话处于空闲状态、不存在正在执行的事务,其占用的后端连接也无法被其他会话复用。因此,会话级连接池无法显著降低数据库实例的总连接数。

4)使用限制

无

事务级连接池 vs 会话级连接池对比

对比项

事务级连接池

会话级连接池

连接获取粒度

事务 / 请求级

会话级

后端连接占用周期

仅在事务或 SQL 执行期间占用

会话整个生命周期独占

连接复用能力

高

较低

数据库总连接数

可显著降低

基本无法降低

空闲会话资源占用

空闲时不占用后端连接

空闲会话仍占用后端连接

适用连接模式

短连接

长连接

适用请求特征

请求不密集、突发性强

单连接请求密集

对数据库主线程压力

显著降低

降低有限

功能限制

存在部分语义与函数限制

无额外限制

行为复杂度

较高

简单直观

配置连接池

前提条件

已开通数据库代理

注意事项

  • 本文所述连接池功能仅指 RDS MySQL 数据库代理提供的连接池能力,不会影响客户端自身的连接池机制。

  • 连接池主要用于降低连接建立与空闲连接带来的资源开销,无法解决因大量慢 SQL 导致的连接堆积问题。对于此类场景,建议从 SQL 优化或 MySQL 实例侧入手,排查并消除慢查询根因。

操作步骤

  1. 登录云数据库MySQL控制台,在实例列表页单击目标实例ID,进入实例管理页面。

  2. 单击左侧导航栏数据库代理,进入数据库代理页面。

  3. 在代理详情页的右上角,单击配置代理策略。

  4. 在弹出的对话框中,根据业务需要修改连接池配置,点击确定,完成连接池的设置。

上一篇:设置代理访问策略
下一篇:设置只读节点延迟剔除
以上内容是否对您有帮助?
有帮助
没帮助