perf: replace per-request DB connections with geventpool

This commit is contained in:
Jonathan Caicedo 2026-05-25 11:12:46 -04:00
parent 5ea194059b
commit 94c8bd36bf
2 changed files with 9 additions and 4 deletions

View file

@ -111,7 +111,7 @@ XC_PROFILE_REFRESH_DELAY = float(os.environ.get('XC_PROFILE_REFRESH_DELAY', '2.5
# Database optimization settings
DATABASE_STATEMENT_TIMEOUT = 300 # Seconds before timing out long-running queries
DATABASE_CONN_MAX_AGE = 0 # Close after each request; gevent makes per-greenlet connections
DATABASE_CONN_MAX_AGE = None # Managed by django-db-geventpool; None = persistent pool connections
# Disable atomic requests for performance-sensitive views
ATOMIC_REQUESTS = False
@ -221,13 +221,17 @@ if os.getenv("DB_ENGINE", None) == "sqlite":
else:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"ENGINE": "django_db_geventpool.backends.postgresql",
"NAME": os.environ.get("POSTGRES_DB", "dispatcharr"),
"USER": os.environ.get("POSTGRES_USER", "dispatch"),
"PASSWORD": os.environ.get("POSTGRES_PASSWORD", "secret"),
"HOST": os.environ.get("POSTGRES_HOST", "localhost"),
"PORT": int(os.environ.get("POSTGRES_PORT", 5432)),
"CONN_MAX_AGE": DATABASE_CONN_MAX_AGE,
"OPTIONS": {
"MAX_CONNS": 20, # Per-worker pool size; 4 workers × 20 = 80 total < pg max_connections=100
"REUSE_CONNS": 10, # Connections to keep warm between requests
},
}
}
@ -238,9 +242,9 @@ else:
("POSTGRES_SSL_KEY", POSTGRES_SSL_KEY),
], "PostgreSQL")
DATABASES["default"]["OPTIONS"] = {
DATABASES["default"]["OPTIONS"].update({
"sslmode": POSTGRES_SSL_MODE,
}
})
if POSTGRES_SSL_CA_CERT:
DATABASES["default"]["OPTIONS"]["sslrootcert"] = POSTGRES_SSL_CA_CERT
if POSTGRES_SSL_CERT:

View file

@ -19,6 +19,7 @@ dependencies = [
"yt-dlp",
"gevent==26.4.0",
"psycogreen",
"django-db-geventpool",
"daphne",
"uwsgi",
"django-cors-headers",