数据库连接池配置【报错得配置】:
self._pool = PooledDB(
creator=pymysql,
mincached=1, # 初始化时,最小闲置数
maxcached=10, # 最大闲置数
blocking=True, # 无可用连接,等待
maxusage=1, # 一个连接最多复用次数,None为无限
# maxconnections=10, #创建连接池的最大数量
# maxshared=20, #共享连接允许最大数量
**Base_database_setting
)
线上环境突然大量报出这个错误,且导致其他sql语句都不能正常执行。
加大 pool_size=200 无用。
mysql 数据库执行show processlist;
发现有很多delete 语句处于执行没被释放状态。已经把当前连接占满。经检查此delete语句在等待select释放。且等待时间过长。
修改此处有delete的代码逻辑后
再次执行show processlist; 已经无正在执行时间超长的process
mysql问题
sqlalchemy.exc.TimeoutError: QueuePool limit of size 130 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r)
大致说一下问题:数据库的链接过多,没有及时的释放导致的 mysql的默认回收时间为八小时,可能是你自己设置的回收时间过长所导致的。
recycle的值,代表一个空闲的连接超过多长时间会被回收,而回收是在获取连接的时候,才会执行这个操作,也就是说,当在获取连接的时候,会检查这个连接的创建时间,如果这个连接的创建时间超过了recycle的时间, 则回收, 并且创建一个新的连接并返回