场景:
python 多线程中,传入多个sql进行查询,返回的结果和传入的sql数量不一致。
原因:
单个 SQL 查询比较耗时,导致 SQLAlchemy 的连接池被占满,后续连接等待时间过长超过了默认的 pool_timeout 值而被丢弃
所以每次获取到的数据结果返回和传入的sql结果不一致。
处理办法:
把 pool_size 和 max_overflow 的值调大(pool_size = 20, max_overflow = 30)
engines['config'] = create_engine(
CONF.SQLALCHEMY_BINDS['config'],
pool_size=CONF.SQLALCHEMY_POOL_SIZE, # 5
pool_recycle=CONF.SQLALCHEMY_POOL_RECYCLE, # 3600
)
engines['data'] = create_engine(
CONF.SQLALCHEMY_BIND_URI,
pool_size=CONF.SQLALCHEMY_CLICKHOUSE_POOL_SIZE, # 20
max_overflow=CONF.SQLALCHEMY_CLICKHOUSE_MAX_OVERFLOW, # 30
)