背景
最近在写个项目的时候使用了sqlalchemy的ORM框架进行对数据库的接口书写,然后在写一个删除后自增id重设再添加的小接口时遇到了点问题。
问题一:session或者connection连接溢出,解决
engine = create_engine(“mysql+pymysql://root:password@localhost:3306/db?charset=utf8”, pool_size=5, max_overflow=3, echo_pool=True)
这是我们常用的engine连接数据库的连接池,在这里我们的pool_size指的是连接池的并发连接数,也就是你在进行处理mysql数据库语句时的session的基本连接数。而max_overflow则是你的最大溢出量,假如在进行并发处理事务时你的session连接量大于 pool_size+max_overflow 的量,那么你的进程就会被锁死,就会出现connection time out的连接超时问题。
解决方法: 对max_overflow 或者 pool_size进行数量上的增大即可解决。
问题二: session的占用问题
这个问题如果没解决也是很头疼的,因为这个问题利用上一种方法解决并不可靠,甚至没用。摸索着,我看到了一点曙光,之前在做另一个项目的时候曾经有过session的占用导致数据库过了8小时就不能够进行sqlalchemy的连接,找出原因就是session的占用没用关闭。
解决方法: 每一个session进程都要先close后再进行其他session进程的事务,这样在同个session的调用中就不会出现占用的问题。