Lustre上的“ sqlite3.OperationalError:数据库或磁盘已满”

use*_*589 3 sqlite

我的应用程序日志中有此错误:

sqlite3.OperationalError: database or disk is full
Run Code Online (Sandbox Code Playgroud)

由于有足够的磁盘空间可用,并且我的SQLite数据库似乎没有损坏(integrity_check没有报告任何错误),为什么会发生这种情况,我该如何调试呢?

我正在使用Lustre文件系统(带有flockset),直到现在,它都运行良好。

版本是:

  • 的Python 2.6.6
  • SQLite 3.3.6

小智 5

原始海报可能为时已晚,但我只是遇到了这个问题,无法找到答案,所以我将记录在案,以期对其他人有所帮助:

事实证明,即使有足够的磁盘空间,SQLite数据库实际上可以充满,因为它限制了数据库文件中的页面数

http://www.sqlite.org/pragma.html#pragma_max_page_count

在我的情况下,值为1073741823,这意味着与1024字节的页面大小结合使用时,数据库最大容量为1 TB,并返回“ database or disk is full”错误。

好消息是您可以提高限制。例如通过发行将它加倍PRAGMA max_page_count = 2147483646;

但是,该限制似乎并未保存在数据库文件中,因此每次打开数据库时都必须在应用程序中运行该限制。