当我尝试从大约1000个进程中从sqlite数据库读取(选择)时,我不断收到类似的错误消息
SQL error: database disk image is malformed
或更少的频率
SQL error: file is encrypted or is not a database
从一些线程。
我在3台主机上测试了该程序和数据库:
带有较旧的1核CPU的
DB始终位于/tmp/文件夹中,因此它基本上位于RAM中。
完整性检查表明DB很好。
什么会导致此问题,并且有解决方案?
最佳答案
解决了。问题是由于在fork()之前打开了与数据库的连接。许多进程使用一个连接。现在,它在fork()之后打开,一切正常。
只有在与此数据库有多个连接的情况下,Sqlite3才能同时对多个选择提供支持。在这种情况下,多个进程试图通过同一连接查询数据库。在较慢的主机上,这不是问题,但在较新的计算机上,进程可能运行得太快,以前的查询已被新查询覆盖/中断。只是猜测:)
关于linux - 多线程和Sqlite-数据库磁盘镜像格式错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30596633/