문제 : pool 사용 시 설정된 수보다 많은 session을 사용하려고 할때 timeout이 발생
- pool_recycle 값을 셋팅해서 mysql과의 Connection 문제는 해결 했는데 또 같은 에러인 'MySQL server has gone away'가 발생했다.
정상적으로 pool에서 session을 얻어올 때 메시지
> checked out from pool
pool의 한계치에 도달했을때 메시지
> being returned to pool
> rollback-on-return
timeout 발생 메시지
> QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30
- 결론은 pool을 사용할 때 리소스를 반환해주지 않으면 내부적으로 pool을 관리하는 동작에 의해 원치 않는 동작이 수행 될 수 있다. 이 번 문제는 pool의 모든 리소스를 사용한 상태로 리소스 반환이 없어서 30초간 block이 되었고 sqlalchemy의 pool_timeout=30 이라는 설정값에 의해 timeout이 발생한 것이었다.
- session 사용 후 flush 또는 close를 수행함으로써 해결.
댓글