FastAPI + SqlAlchemy + PostgreSQL Слишком много соединений

Постараюсь коротко:

Ниже код без изменений (кроме endpoint-а для примера)

  • При старте 2-3 соединения к БД
  • Через несколько часов исчерпывается лимит подключений (1000). Висит 900+ idle соединений
  • пробовал и через контекстный менеджер (await with async_session() as session) и try-except-finally

Куда еще копать? Может какие то настройки PostgreSQL проверить? Или что то в пуле не докрутил?


POSTGRES_POOL_SIZE=5
POSTGRES_MAX_OVERFLOW=20
POSTGRES_POOL_TIMEOUT=30
POSTGRES_POOL_RECYCLE=1800

engine = create_async_engine(
    settings.SQLALCHEMY_DATABASE_URI,
    pool_pre_ping=True,
    echo=True,
    poolclass=QueuePool,
    pool_size=settings.POSTGRES_POOL_SIZE,
    max_overflow=settings.POSTGRES_MAX_OVERFLOW,
    pool_timeout=settings.POSTGRES_POOL_TIMEOUT,
    pool_recycle=settings.POSTGRES_POOL_RECYCLE,
    connect_args={"server_settings": {"application_name": settings.PROJECT_NAME}}
)

async_session = sessionmaker(
    autocommit=False,
    autoflush=False,
    bind=engine,
    class_=AsyncSession
)

async def get_db() -> Generator:
    session = async_session()
    try:
        yield session
    except:
        await session.rollback()
        logger.critical("Database session rollback at exception")
        raise
    finally:
        await session.commit()
        await session.close()
        logger.debug("Database session closed")

# endpont
@router.post("/some_endpoint")
async def some_endpoint(
        db: Session = Depends(deps.get_db)  # noqa
):
    pass

Ответы (0 шт):