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