From 8d7c5859541cb8f6ed18eef017dbf46ca829dd64 Mon Sep 17 00:00:00 2001 From: adam-gf Date: Wed, 18 Dec 2024 10:42:32 +0100 Subject: [PATCH 1/2] Moves the pg database config to settings. Lowers the connection pool size --- backend/v2/core/dependencies.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/v2/core/dependencies.py b/backend/v2/core/dependencies.py index 163da14099..bb75678685 100644 --- a/backend/v2/core/dependencies.py +++ b/backend/v2/core/dependencies.py @@ -36,6 +36,12 @@ def get_w3( class DatabaseSettings(OctantSettings): db_uri: str = Field(..., alias="db_uri") + + pg_pool_size: int = Field(10, alias="sqlalchemy_connection_pool_size") + pg_max_overflow: int = Field(30, alias="sqlalchemy_connection_pool_max_overflow") + pg_pool_timeout: int = 60 + pg_pool_recycle: int = 30 * 60 # 30 minutes + pg_pool_pre_ping: bool = True # TODO other settings of the database @property @@ -60,11 +66,11 @@ def get_sessionmaker( kw = {} if "postgresql" in settings.sqlalchemy_database_uri: kw = { - "pool_size": 100, # Initial pool size (default is 5) - "max_overflow": 10, # Extra connections if pool is exhausted - "pool_timeout": 30, # Timeout before giving up on a connection - "pool_recycle": 3600, # Recycle connections after 1 hour (for long-lived connections) - "pool_pre_ping": True, # Check if the connection is alive before using it + "pool_size": settings.pg_pool_size, + "max_overflow": settings.pg_max_overflow, + "pool_timeout": settings.pg_pool_timeout, + "pool_recycle": settings.pg_pool_recycle, + "pool_pre_ping": settings.pg_pool_pre_ping, } engine = create_async_engine( From d621ee38b4e5fab432d8d9dac5bc22b33fe27513 Mon Sep 17 00:00:00 2001 From: adam-gf Date: Wed, 18 Dec 2024 11:48:48 +0100 Subject: [PATCH 2/2] reduce overflow --- backend/app/settings.py | 2 +- backend/v2/core/dependencies.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/settings.py b/backend/app/settings.py index 6ee56eea37..eb2fe7bc99 100644 --- a/backend/app/settings.py +++ b/backend/app/settings.py @@ -91,7 +91,7 @@ class ProdConfig(Config): os.getenv("SQLALCHEMY_CONNECTION_POOL_SIZE", 10) ) SQLALCHEMY_CONNECTION_POOL_MAX_OVERFLOW = int( - os.getenv("SQLALCHEMY_CONNECTION_POOL_MAX_OVERFLOW", 100) + os.getenv("SQLALCHEMY_CONNECTION_POOL_MAX_OVERFLOW", 0) ) SQLALCHEMY_DATABASE_URI = os.getenv("DB_URI") SQLALCHEMY_ENGINE_OPTIONS = { diff --git a/backend/v2/core/dependencies.py b/backend/v2/core/dependencies.py index bb75678685..d45a2cbc9e 100644 --- a/backend/v2/core/dependencies.py +++ b/backend/v2/core/dependencies.py @@ -38,7 +38,7 @@ class DatabaseSettings(OctantSettings): db_uri: str = Field(..., alias="db_uri") pg_pool_size: int = Field(10, alias="sqlalchemy_connection_pool_size") - pg_max_overflow: int = Field(30, alias="sqlalchemy_connection_pool_max_overflow") + pg_max_overflow: int = Field(0, alias="sqlalchemy_connection_pool_max_overflow") pg_pool_timeout: int = 60 pg_pool_recycle: int = 30 * 60 # 30 minutes pg_pool_pre_ping: bool = True