最近更新时间:2026-01-13 13:16:15
数据库代理内置连接池机制,支持后端数据库连接的复用,减少代理直连数据库的连接数量。在短连接较多或连接创建频繁的场景下,可有效避免频繁建连带来的资源消耗,显著降低数据库侧负载。
在数据库代理架构中,连接被拆分为两个层次:
前端连接:客户端与数据库代理之间建立的会话连接
后端连接:数据库代理与后端 MySQL 实例之间的物理连接
客户端建立会话时,代理仅创建前端连接,不会立即分配后端连接;只有在执行 SQL 或事务时,才会从连接池中获取后端连接。
根据后端连接的获取与释放粒度不同,RDS MySQL 数据库代理支持两种连接池模式:事务级连接池和会话级连接池。您可根据业务访问模式和资源使用情况,选择是否启用连接池及其类型。
连接池类型 | 使用场景 |
事务级连接池(默认) | 适用于短连接、连接创建频繁且数量达到MySQL数据库连接数限制的场景。 前提:业务不涉及事务级连接池的使用限制。 |
会话级连接池 | 适用于长连接、连接数量少、连接上请求密集的场景。 |
事务级连接池以请求 / 事务粒度获取和释放后端数据库连接,实现高效的连接复用与资源控制。
业务以短连接为主
客户端频繁建立和释放连接
总连接数较大,接近或达到 MySQL 实例连接数上限
降低连接建立开销:减少应用与数据库之间频繁建连带来的认证、握手等成本,降低 MySQL 主线程压力
减少数据库连接数:在客户端请求不密集的情况下,显著降低数据库实例上的总连接数量
从事务级连接池获取连接的具体流程如下:
每次开始新的请求/事务时:
若存在可复用后端连接,代理直接从连接池中获取后端连接执行当前请求或事务;事务结束后,连接归还至连接池,供后续会话复用。
若不存在可复用后端连接,代理动态创建新的后端连接处理请求,并在事务完成后将其纳入连接池统一管理。
通过该机制,多个前端会话可共享有限数量的后端连接,从而显著提升资源利用率。
主要优势:
降低连接创建成本:后端连接保持长生命周期,避免频繁的 TCP 握手和认证过程,减少数据库 CPU 与网络开销
优化资源使用效率:通过连接复用,显著减少数据库实例上的总连接数,避免大量空闲连接占用内存和线程资源
开启事务级连接池后,在以下场景中,后端连接将被独占使用,直至连接释放。在此期间不会归还至连接池,其行为等同于会话级连接池,以保证语义正确性和事务一致性:
执行 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 和端口信息,可能与客户端实际地址不一致。
会话级连接池以会话粒度获取和释放后端数据库连接。相较于事务级连接池,其连接分配粒度更粗,连接复用能力相对较低。
业务以长连接为主
连接数量相对较少,且单连接上的请求较为密集
降低连接建立开销:减少应用与数据库之间频繁建连带来的认证、握手等成本,降低 MySQL 主线程负载
会话级连接池的整体机制与事务级连接池类似,不同之处在于后端连接的占用周期。
当客户端建立会话并发起首个请求时:
存在可复用后端连接,代理从连接池中获取一个后端连接,并绑定至该会话,用于后续所有请求。
不存在可复用后端连接,代理动态创建新的后端连接处理请求,并将其绑定到当前会话。
在整个会话生命周期内,该会话始终独占一个后端连接;会话结束、前端连接断开后,后端连接才会被归还至连接池,供后续会话复用。
说明:在会话未结束前,即使该会话处于空闲状态、不存在正在执行的事务,其占用的后端连接也无法被其他会话复用。因此,会话级连接池无法显著降低数据库实例的总连接数。
无
对比项 | 事务级连接池 | 会话级连接池 |
连接获取粒度 | 事务 / 请求级 | 会话级 |
后端连接占用周期 | 仅在事务或 SQL 执行期间占用 | 会话整个生命周期独占 |
连接复用能力 | 高 | 较低 |
数据库总连接数 | 可显著降低 | 基本无法降低 |
空闲会话资源占用 | 空闲时不占用后端连接 | 空闲会话仍占用后端连接 |
适用连接模式 | 短连接 | 长连接 |
适用请求特征 | 请求不密集、突发性强 | 单连接请求密集 |
对数据库主线程压力 | 显著降低 | 降低有限 |
功能限制 | 存在部分语义与函数限制 | 无额外限制 |
行为复杂度 | 较高 | 简单直观 |
已开通数据库代理
本文所述连接池功能仅指 RDS MySQL 数据库代理提供的连接池能力,不会影响客户端自身的连接池机制。
连接池主要用于降低连接建立与空闲连接带来的资源开销,无法解决因大量慢 SQL 导致的连接堆积问题。对于此类场景,建议从 SQL 优化或 MySQL 实例侧入手,排查并消除慢查询根因。
登录云数据库MySQL控制台,在实例列表页单击目标实例ID,进入实例管理页面。
单击左侧导航栏数据库代理,进入数据库代理页面。
在代理详情页的右上角,单击配置代理策略。
在弹出的对话框中,根据业务需要修改连接池配置,点击确定,完成连接池的设置。
纯净模式
