为什么运行django的session cleanup命令kill我的机器资源?

时间:2013-08-15 18:10:33

标签: python django session

我有一年的生产站点配置了django.contrib.sessions.backends.cached_db后端和MySQL dabatase后端。我选择cached_db的原因是安全性与读取性能的混合。

问题是,清除命令,负责删除所有过期的会话,遗憾的是从未执行过,以2.3GB会话表数据长度,600万行和500Mb索引长度进行调整。

当我尝试运行./manage.py cleanup(在Django 1.3中)命令或./manage.py clearsessions(Django的1.5通讯员)时,过程永远不会结束(或者我的耐心没有完成3小时)

django用来执行此操作的代码是:

Session.objects.filter(expire_date__lt=timezone.now()).delete()

在第一印象中,我认为这是正常的,因为该表有6M行,但是,在我检查System的监视器之后,我发现所有内存和cpu都被python进程使用,而不是mysqld,充满了我的机器资源。我认为这个命令代码有点糟糕。似乎是python迭代所有已建立的过期会话行,然后逐个删除它们中的每一个。在这种情况下,重构为仅生成DELETE FROM命令的代码可以解决我的问题并帮助django社区,对吧?但是,如果是这种情况,Queryset删除命令行为很奇怪,在我看来没有优化。我是对的吗?

由于

0 个答案:

没有答案