当我尝试从大约1000个进程中从sqlite数据库读取(选择)时,我不断收到类似的错误消息

SQL error: database disk image is malformed

或更少的频率
SQL error: file is encrypted or is not a database

从一些线程。

我在3台主机上测试了该程序和数据库:

带有较旧的1核CPU的
  • -没问题,没有错误
  • 具有1核心VPS的
  • -发生错误
  • 带有8核i7的
  • -发生错误

  • DB始终位于/tmp/文件夹中,因此它基本上位于RAM中。
    完整性检查表明DB很好。

    什么会导致此问题,并且有解决方案?

    最佳答案

    解决了。问题是由于在fork()之前打开了与数据库的连接。许多进程使用一个连接。现在,它在fork()之后打开,一切正常。

    只有在与此数据库有多个连接的情况下,Sqlite3才能同时对多个选择提供支持。在这种情况下,多个进程试图通过同一连接查询数据库。在较慢的主机上,这不是问题,但在较新的计算机上,进程可能运行得太快,以前的查询已被新查询覆盖/中断。只是猜测:)

    关于linux - 多线程和Sqlite-数据库磁盘镜像格式错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30596633/

    10-14 18:16
    查看更多