Warm up database connection pool on startup to avoid 8s cold-start penalty on first API request

This commit is contained in:
YueGuobin 2026-06-15 23:26:28 +08:00
parent 6d3cfc7d1e
commit e90fb0774c
No known key found for this signature in database

View File

@ -99,6 +99,14 @@ async def connect_to_db(app: FastAPI) -> None:
return row[0] if row else "unknown"
wal_mode = await _verify_conn.run_sync(_check_wal)
log.info(f"SQLite journal mode: {wal_mode} {'' if wal_mode and wal_mode.upper() == 'WAL' else '❌ will cause database contention'}")
# Warm up the connection pool and ORM cache so the first API request
# doesn't pay the cold-start penalty (observed: 6-8s first DB query)
async with engine.connect() as _warmup:
def _warmup_query(conn):
from sqlalchemy import text
conn.execute(text("SELECT 1"))
await _warmup.run_sync(_warmup_query)
log.info("Database connection pool warmed up")
alembic_cfg = config.Config()
alembic_cfg.set_main_option("script_location", "gns3server:db_migrations")
#alembic_cfg.set_main_option('sqlalchemy.url', db_url)