首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL和django在删除大量会话时挂起

问MySQL和django在删除大量会话时挂起
EN

Stack Overflow用户
提问于 2011-04-18 21:03:03
回答 3查看 475关注 0票数 1

我用MySQL作为DB后端运行django site。最后,我在django_session表中得到了300万行。它们中的大多数都已过期,因此我想删除它们。但是如果我手动运行delete from django_session where expire_date < "2011-04-18",整个网站似乎都挂了--它不能通过浏览器访问。

为什么这样的阻塞是可能的?如何避免呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-18 21:07:42

如果您的表为MyISAM,则DELETE操作将锁定该表,并且并发查询无法访问该表。

如果有许多记录要删除,则表被锁定的时间太长。

将DELETE语句拆分为几个较短的批处理。

票数 5
EN

Stack Overflow用户

发布于 2011-04-18 21:07:34

我不是MySQL专家,但我猜MySQL为删除锁定了表,这可能与MySQL事务/后端相关。当正在进行删除操作时,MySQL会阻止其他连接对表的访问。MyISAM和InnoDB后端行为可能不同。我建议您学习与此相关的MySQL手册:这个问题并不局限于Django域,而是一般情况下如何在不阻塞对表的访问的情况下删除MySQL行。

为了将来的参考,我建议你设置一个会话清理器任务,它将清除来自cron的会话,比如说一天一次,这样你就不会得到这么大的表。

票数 1
EN

Stack Overflow用户

发布于 2011-04-18 21:06:00

您可以尝试示例清理命令- http://docs.djangoproject.com/en/dev/topics/http/sessions/?from=olddocs#clearing-the-session-table -我想它会删除所有过期的会话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5703308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档