数据库连接太多(django 4.x / ASGI)

use*_*738 5 django asgi django-4.0 django-4.1

我已经部署了一个 django 应用程序(使用 uvicorn 在 ASGI 上)并获得了很多 OperationalError FATAL: sorry, too many clients already

这似乎是 django 4.x 和 ASGI 的一个已知问题 #33497,但到目前为止我找不到任何内容(除了承认它)

有没有办法解决这个问题,或者我应该切换到 WSGI(或降级到 3.2)?

在我看来,这对于使用 ASGI 来说是一个阻碍问题。难道不应该更好地记录下来吗?(除非我错过了)

Cpt*_*ple 2

我遇到了这个问题,并通过CONN_MAX_AGE = 0在 Django settings.py 中设置(这也是默认设置)解决了它:

DATABASES = {
    "default": {
        "CONN_MAX_AGE": 0,  #  Use 0 to close database connections at the end of each request
        "ENGINE": "django.db.backends.postgresql",
        "HOST": os.environ.get("POSTGRES_HOST", "db"),
        "NAME": os.environ.get("POSTGRES_DB"),
        "PASSWORD": os.environ.get("POSTGRES_PASSWORD"),
        "PORT": os.environ.get("POSTGRES_PORT", "5432"),
        "USER": os.environ.get("POSTGRES_USER"),
    }
}
Run Code Online (Sandbox Code Playgroud)

它有一些缺点,CONN_MAX_AGE = 0因为它本质上会关闭持久连接。可能有更好的解决方案,例如连接池或调整工作进程的数量,以更有效地使用连接。