繁体   English   中英

SQLITE3数据库被锁定Django和Celery

[英]SQLITE3 database getting locked Django and Celery

我们有一个旧版django应用程序(django 1.4.2),正在运行以发布一些报告。 它使用芹菜和sqlite3。 由于存在多个并发连接,因此sqlite数据库已被锁定。

这些应用程序是在将近四年前编写的,除了偶尔出现的数据库锁定变得很痛苦之外,它的运行情况非常好。 假定设置CONN_MAX_AGE(在django 1.6中引入)可以正常工作,则升级到Django的较新版本被否决了,因为该应用程序相当大并且可能存在一些依赖性问题。

请注意,这不是Web前端应用程序的内部用户少于30个。 因此,安全性不是大问题。

问题是我们如何确保数据库不会被锁定。 有没有一种方法可以为旧版本的django实现CONN_MAX_AGE。

您应该更改为使用对多个连接(例如postgres或mysql)具有更好支持的数据库,而sqlite实际上并不是为此而构建的,它更多地用于开发中,因为很少有多个并发连接

您可以在django文档上找到有关锁定错误的更多信息- “数据库已锁定”错误

如果遇到此错误,可以通过以下方法解决:

  • 切换到另一个数据库后端。 在某些时候,SQLite对于实际应用程序来说太“精简”了,这些并发错误表明您已经达到了这一点。

  • 重写代码以减少并发性,并确保数据库事务是短暂的。

  • 通过设置超时数据库选项选项来增加默认超时值:


只是注意到,这仅适用于> = Django 1.8

除此之外,如果你的Postgres去,你会发现自己能够使用更多的Django的queryset的方法, 示范田 ,和更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM