我在开发中使用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
)。
答案 0 :(得分:0)
您正在开发模式下运行Django,因此CONN_MAX_AGE
无效,因为每个请求由不同的线程处理。
来自docs:
开发服务器为它处理的每个请求创建一个新线程,从而消除了持久连接的影响。在开发过程中不要启用它们
关于60秒后连接仍未关闭:超时将在下一个请求时关闭,因此只要在60秒后向django发出新请求,它就会检测到过时的连接并关闭它。