报错
sqlalchemy.exc.TimeoutError: QueuePool limit of size 100 overflow 10 reached,
connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r)
查看数据库未活动超时时间
show variables like "interactive_timeout";
一般来说数据库默认的超时时间是8小时,注意设置连接回收时间小于数据库配置的失效时间
engine配置
配置SQLAlchemy的engine是很重要的,有些参数一定要知道,我这里的配置方式大致如下:
engine = create_engine("mysql+pymysql://user:password@127.0.0.1:3306/test?charset=utf8",pool_size=10,pool_recycle=1600,pool_pre_ping=True,pool_use_lifo=True,echo_pool=True,max_overflow=5
)
- pool_size: 连接池大小;
- pool_recycle:连接回收时间,这个值必须要比数据库自身配置的interactive_timeout值小;
- pool_pre_ping:预检测池中连接是否有效,并替换无效连接;
- pool_use_lifo:使用后进先出的方式获取连接,允许多余连接保持空闲;
- echo_pool:会打印输出连接池的异常信息,帮助排查问题;
- max_overflow: 最大允许溢出连接池大小的连接数量。
https://www.osgeo.cn/sqlalchemy/core/pooling.html