- 文档首页
云数据库 veDB MySQL 版
用户指南
读写分离
连接池
连接池
veDB MySQL 提供会话级连接池和事务级连接池,能够有效降低大量连接带来的数据库负载压力。本文介绍两种连接池的工作原理,帮助您根据业务场景选用合适的连接池。
- 连接池目前为白名单功能,如需使用,请提交工单联系技术支持。
- 修改连接池类型后,仅对新建连接生效。修改连接池设置请参见编辑连接终端。
- 开启连接池后,当相同 username 但不同 host 配置了不同权限时,可能会出现权限错误。例如,userA@hostA 拥有 DB_A 权限,而 userA@hostB 没有 DB_A 权限,开启连接池后在连接复用过程中可能出现权限不符合预期的问题。
- 开启连接池后,前端用户建立连接并非立即与后端建立连接,而是延迟至发起请求时,从连接池中获取空闲连接或新建连接。若没有可用连接(例如后端数据库连接达到上限、数据库不存在等情况),代理会在执行请求时断开与前端用户的连接。
会话级连接池用于降低用户短连接频繁建立新连接对实例造成的负载。当启用会话级连接池后,veDB MySQL 代理会在前端用户断开连接后,判断后端数据库连接是否处于空闲且可复用状态。若可复用,则将其放回连接池中保留一段时间,后续若有新的前端连接请求建立,会直接从连接池中获取空闲连接进行复用;若没有可用的空闲连接,则新建连接。
- 会话级连接池无法降低数据库节点上的并发活跃连接数,而是通过连接复用的方式,减少建立连接流程对数据库主线程调度的开销。处于空闲状态的连接在连接池内等待复用的过程中,会暂时占用数据库的连接数。
- 会话级连接池无法解决因慢 SQL 导致短连接无法及时在数据库上释放的问题,针对此类情况,建议优先解决慢 SQL 问题。
事务级连接池主要用于降低后端数据库的连接总数,同时可减少短连接频繁建连给数据库带来的负载压力。
当前端用户建连时,首先会与 veDB MySQL 代理进行建连认证,此时不会与后端数据库建立连接。当用户发送请求时,代理会在连接池中查找是否存在满足需求(包括 username、Client Capabilities)的连接。若存在满足条件的连接,则将其取出并复用(在此过程中,会判断相关的 Session 变量以及 Schema 状态是否一致,若不一致,则在下发请求前会先进行状态同步);若不存在满足条件的连接,则启动新建连接流程。并在当前连接的事务结束后将连接放回连接池,以供其他连接的请求使用。通过事务级连接池的连接复用流程,能够极大地降低在前端用户连接数量较多但并发请求数量较少的情况下,代理到数据库之间的总连接数。
- 当用户执行以下类型的请求后,所获取的连接不会被放回连接池,而是一直绑定到该前端连接,直至前端连接退出后销毁。
- 与历史上文相关的语句,如 FOUND_ROWS、ROW_COUNT 和 LAST_INSERT_ID 函数,可成功调用,但无法保证结果的准确性。
- 前端用户建连协议中收到的 Connection ID 与后端无法对齐,使用 select connection_id() 多次查询 Thread ID 可能会发生变化。执行 KILL 命令可能会遇到 ERROR 1094 (HY000): Unknown thread id 错误,如需 KILL 数据库上正在执行的请求,请在会话管理中进行操作。
- show processlist 或者全量 SQL 洞察中显示的 IP 地址和端口,可能会与客户端实际的 IP 地址和端口不一致。
- 如果用户客户端已支持了连接池,或用户连接大多为长连接,则无需启用 veDB MySQL 代理侧的连接池。
- 如果用户前端连接较多,且业务使用场景不涉及上述事务连接池的使用限制,那么可考虑开启事务级连接池。
- 若业务为短连接场景,且业务使用场景包含上述事务连接池的限制,则可以考虑使用会话级连接池。
最近更新时间:2026.07.31 10:06:27