Я сталкиваюсь с проблемой слишком большого количества дБ свободных соединений. Я использую движок psycopg2 напрямую, без использования пула. Я играл с параметром «CONN_MAX_AGE» и пытался закрыть соединение в коде приложения везде, где, как я чувствовал, могло помочь, но ничто не помогло в реальности. Ниже приведен декоратор, который я создал для закрытия соединений. Я украсил методы везде, где я читаю / записываю в / из дБ.
def close_db_connection(ExceptionToCheck=Exception, raise_exception=False, notify=False):
"""Close the database connection when we're finished, django will have to get a new one..."""
def deco_wrap(f):
@wraps(f)
def f_wrap(*args, **kwargs):
try:
return f(*args, **kwargs)
except Exception as e:
raise e
finally:
connection.close()
return f_wrap
return deco_wrap
У меня есть следующие конфигурации
python 3.7.7 (recently upgraded from 3.5)
django 3.0.4 (recently upgraded from 2.2, in hope of fixing the issue)
gunicorn 19.4.5 (forking 4 workers, I have 4CPU EC2 instance)
Я пробовал следующие проблемы в GitHub / StackOverflow, где все упоминается либо использование pgbouncer в качестве механизма пула соединений для настройки параметра CONN_MAX_AGE , либо закрытие соединений вручную в коде.
Что я делаю неправильно или отсутствует?