6

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

sqlite3.OperationalError: database or disk is full

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

我正在使用 Lustre 文件系统(带flock设置),直到现在,它运行良好。

版本是:

  • Python 2.6.6
  • SQLite 3.3.6
4

3 回答 3

7

对于原始海报来说可能为时已晚,但我只是遇到了这个问题并且找不到答案,所以我将记录我的发现,希望它可以帮助其他人:

事实证明,即使有足够的磁盘空间, 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;.

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

于 2014-06-24T18:02:20.703 回答
1

默认情况下,SQLite 使用/tmp临时目录(不是内存)。如果 /tmp太小你会得到disk full。在这种情况下,像这样更改临时目录: export TMPDIR=<big file system>.

于 2021-08-25T05:14:42.870 回答
0

我也有同样的问题。您的主机或 PC 的存储已满,因此请删除系统中的一些文件,然后问题就消失了。

于 2021-03-17T10:49:42.407 回答