使用 Perl DBD::SQLite 时,SQLite 是否存在一个已知问题,即在单个事务中为第二个查询提供“数据库已锁定”错误?场景:Linux,Perl DBI,AutoCommit => 0,具有两个代码块的子例程(使用这些块来本地化变量名)。在第一个代码块中,prepare() 在 select 语句上创建了一个查询句柄,它被 execute() 并关闭了块。第二个代码块另一个查询句柄是由准备更新语句创建的,并且经常(30% 的时间)SQLite/DBI 在此阶段给出数据库锁定错误。我认为错误发生在prepare()期间而不是execute()期间。
我的解决方法是在第一次查询后提交。(在第一个查询上调用完成没有帮助)。出于与优雅和性能相关的几个原因,我不想承诺。多年来,原始代码使用 Postgres 作为数据库运行良好。我试过 sqlite_use_immediate_transaction 没有效果。
在所有其他情况下,我发现 SQLite 的性能非常好,所以我怀疑这是 DBD 驱动程序的疏忽,而不是 SQLite 的问题。可悲的是,我当前的代码是一大堆脚本和模块,所以我没有一个简短的单文件测试用例。