You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django每次执行SQL查询都触发新数据库登录,如何配置持久连接复用会话?

Django 数据库频繁新建连接问题修复方案

核心原因

Django 默认数据库连接的生命周期为单次请求,由配置项 CONN_MAX_AGE 控制,默认值为 0,即每次请求执行完成后立即销毁连接,因此每10秒一次的查询会对应产生一次新的数据库登录行为。

修复配置

在 settings.py 的数据库配置块中新增 CONN_MAX_AGE 参数即可启用连接持久化复用,单位为秒,示例配置如下:

DATABASES = {
    "default": {
        # 保留原有配置:ENGINE/NAME/USER/PASSWORD/HOST/PORT 均无需修改
        "ENGINE": "django.db.backends.mysql",
        "NAME": "your_db_name",
        "USER": "your_db_user",
        "PASSWORD": "your_db_password",
        "HOST": "127.0.0.1",
        "PORT": "3306",
        # 新增以下配置,设置连接最大存活时间,可根据业务场景调整
        "CONN_MAX_AGE": 600, # 示例设置为10分钟,即连接在10分钟内可复用,无需重新登录
    }
}

参数规则说明

  • 当 CONN_MAX_AGE > 0 时,Django 会将连接保存在当前线程的上下文内,有效期内的所有数据库操作都会复用该连接
  • 若设置为 None,连接会一直复用直到被数据库侧主动断开,建议配合数据库的超时参数(如 MySQL 的 wait_timeout)设置,避免使用僵尸连接
  • 多 worker 部署场景下(如 Gunicorn、uWSGI 启动多进程),每个 worker 会独立维护自己的持久连接,不会跨进程共享

异常排查

如果配置完成后仍存在频繁新建连接的情况,优先排查两个点:

  • 代码中是否手动调用了 connection.close() 或 close_old_connections() 主动销毁连接
  • 数据库侧的连接超时参数设置小于 CONN_MAX_AGE,导致连接被数据库主动关闭,Django 只能重新创建连接

相关截图

  • 运行情况截图:运行情况截图
  • SQL登录审计日志截图:SQL登录审计日志截图

内容的提问来源于stack exchange,提问作者lifejustice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:39:04