Django没有重用与CONN_MAX_AGE = 60的MySQL连接

时间:2016-04-25 09:53:29

标签: python mysql django

我在开发中使用Django 1.9.2(DEBUG=True)和MySQL 5.6.23。以下是我的数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': "django",
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
        'CONN_MAX_AGE': 60,
    }
}

我正在查询MySQL以使用以下命令获取活动连接数:

show status where `variable_name` = 'Threads_connected';

它产生这样的结果

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 10    |
+-------------------+-------+
1 row in set (0,00 sec)

每当我向Django发出新请求时,连接线程的数量都会增加,直到数字为(1040, 'Too many connections')时我才会Threads_connected=151。此外,60年代后连接不会关闭。

这种行为似乎不会在生产中发生(DEBUG=False)。

1 个答案:

答案 0 :(得分:0)

您正在开发模式下运行Django,因此CONN_MAX_AGE无效,因为每个请求由不同的线程处理。 来自docs

  

开发服务器为它处理的每个请求创建一个新线程,从而消除了持久连接的影响。在开发过程中不要启用它们

关于60秒后连接仍未关闭:超时将在下一个请求时关闭,因此只要在60秒后向django发出新请求,它就会检测到过时的连接并关闭它。