Как соединения проверяются и освобождаются в SQLAlchemy, когда установлен SQLALCHEMY_POOL_RECYCLE? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть приложение, основанное на flask + sqlalchemy, которое подключается к PostgreSQL. И, кажется, во время некоторых проблем с сетью соединение со вставкой, занимающее блокировку, устарело, и дальнейшие попытки получить ошибку

(psycopg2.errors.LockNotAvailable) canceling statement due to lock timeout\\n
CONTEXT:  while inserting index tuple (10537404,29) in relation

У меня SQLALCHEMY_POOL_RECYCLE = 600, и блокировка была недоступна в течение 15 ~ 16 минут. Я не понимаю почему. В SQLAlchemy doc о перезапуске пула говорится, что аннулирование соединения происходит только во время извлечения. Когда оформить заказ, если я использую db.session? И поможет ли установка idle_in_transaction_session_timeout на 4 минуты в базе данных раньше снять эту блокировку?

...