Django查询永远运行,不超时

我有一些Django的应用程序,是我的MySQL服务器正在查询有正在运行的查询,不超时和阻塞我的MySQL服务器

只是需要帮助,如何解决这个问题的正确方法不知道这是如何devisedjango,或者我需要添加超时设置,我想django应该这样做默认情况下,不知道,因为使零感觉没有超时

这里是不超时或closures的查询

MySQL on localhost (5.7.19) load 5.27 4.81 4.69 4/2383 41852 up 0+00:18:41 [19:13:16] Queries: 8.6k qps: 8 Slow: 0.0 Se/In/Up/De(%): 61/01/02/00 Sorts: 0 qps now: 5 Slow qps: 0.0 Threads: 99 ( 99/ 1) 44/00/00/00 Key Efficiency: 98.9% Bps in/out: 839.8/22.3k Now in/out: 566.3/22.5k Id User Host/IP DB Time Cmd State Query -- ---- ------- -- ---- --- ----- ---------- 6 webapp_user localhost webapp_db 1096 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:44:56' 9 webapp_user localhost webapp_db 1086 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:45:09' 11 webapp_user localhost webapp_db 1085 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:45:10' 15 webapp_user localhost webapp_db 1067 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:45:28' 16 webapp_user localhost webapp_db 1056 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:45:39' 20 webapp_user localhost webapp_db 1053 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:45:42' 25 webapp_user localhost webapp_db 1037 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:45:58' 28 webapp_user localhost webapp_db 1025 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:46:11' 29 webapp_user localhost webapp_db 1022 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:46:14' 32 webapp_user localhost webapp_db 1006 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:46:29' 35 webapp_user localhost webapp_db 994 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:46:42' 36 webapp_user localhost webapp_db 990 Query Sending SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2017-09-19 18:46:45' 

这只是我目前所拥有的副本,这些查询一直运行很长时间,直到我重新启动mysql服务器,他们再次启动,并继续运行,最终他们堵塞在服务器上的CPU和I / O

以下是settings.py文件中的一些内容

 SESSION_COOKIE_AGE = 60*60*24*365*5 SESSION_ENGINE = 'webapp.sessions.backends.db' SESSION_SAVE_EVERY_REQUEST = True # 'django.contrib.sessions.middleware.SessionMiddleware', 'webapp.sessions.middleware.SessionMiddleware', # 'django.contrib.sessions', 'sessions', 

我该如何解决这个问题?

谢谢

更新:

 mysql> SHOW CREATE TABLE django_session; +----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | django_session | CREATE TABLE `django_session` ( `session_key` varchar(40) NOT NULL, `session_data` longtext NOT NULL, `expire_date` datetime NOT NULL, `created` datetime NOT NULL, `last_login` datetime NOT NULL, PRIMARY KEY (`session_key`), KEY `django_session_c25c2c28` (`expire_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SHOW INDEX FROM django_session; +----------------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +----------------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | django_session | 0 | PRIMARY | 1 | session_key | A | 24152280 | NULL | NULL | | BTREE | | | | django_session | 1 | django_session_c25c2c28 | 1 | expire_date | A | 20456614 | NULL | NULL | | BTREE | | | +----------------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 2 rows in set (0.01 sec) 

我补充说

wait_timeout = 120

但仍然遇到同样的问题

wait_timeout在允许长时间运行方面起着重要作用。 检查您的MySQL版本的文档。

更改您的SELECT COUNT(*)从django_session WHERE django_sessionlast_login > ='2017-09-19 18:44:56'到这个SELECT COUNT( last_login )FROM django_session WHERE django_sessionlast_login > ='2017-09-19 18:44:56'