SQLAlchemy连接池状态参数含义咨询(含负溢出值疑问)
连接池参数含义及负值Overflow解析
背景信息
使用Python 3.9.16 + aioodbc 0.5.0,通过SQLAlchemy的create_async_engine配置连接池:
pool_size=8:连接池常驻连接数上限max_overflow=10:允许超出常驻数的临时连接数上限
通过以下代码监控连接池状态:
pool_status = session.get_bind().pool.status()
日志片段示例:
Pool size: 8 Connections in pool: 1 Current Overflow: -7 Current Checked out connections: 0 Pool size: 8 Connections in pool: 0 Current Overflow: -7 Current Checked out connections: 1 Pool size: 8 Connections in pool: 2 Current Overflow: -6 Current Checked out connections: 0 Pool size: 8 Connections in pool: 1 Current Overflow: -5 Current Checked out connections: 2
三个参数的含义与行为
1. Connections in pool
当前连接池中处于空闲状态、可被立即复用的数据库连接数量。这类连接未被任何业务任务占用,等待被借出使用。
2. Current Checked out connections
已经被业务任务借出、正在用于执行SQL查询等操作的连接数量。这类连接处于活跃状态,暂时无法被其他任务复用。
3. Current Overflow
该参数的计算公式为:当前总连接数(空闲+借出) - pool_size,反映连接数与常驻连接数的差值:
- 正值:表示当前总连接数超出了
pool_size,超出部分是临时创建的overflow连接(最多不超过max_overflow),这类连接归还后会被直接销毁,不会放回连接池。 - 负值:表示当前总连接数还未达到配置的
pool_size,负数的绝对值就是待创建的常驻连接数量。这是正常行为——SQLAlchemy连接池默认按需创建连接,不会在初始化时就创建所有pool_size的连接,只有当业务需要时才逐步新建,直到总连接数达到pool_size。
比如日志第一条:Connections in pool=1 + Checked out connections=0 = 总连接数1,减去pool_size=8得到-7,说明此时连接池仅创建了1个常驻连接,还差7个未创建。
当总连接数达到pool_size后,若有新的连接请求,才会创建overflow连接,此时Overflow变为正数;当overflow连接归还后,会被销毁,总连接数回落至pool_size,Overflow回到0。
内容的提问来源于stack exchange,提问作者dfhoag
相关产品推荐
相关产品推荐

