执行检查点失败

Failed to do checkpoint

本文关键字:失败 检查点 执行      更新时间:2023-10-16
int iReturn = sqlite3_wal_checkpoint_v2(m_poDB, NULL, SQLITE_CHECKPOINT_FULL, &iSizeOfWalLog, &iNumOfCheckpointedFrames);

返回iReturn = 5 (SQLITE_BUSY)。写入器不时地醒来,向数据库中添加或删除一些行,执行检查点并再次进入睡眠。

问题1:如果我使用WAL模式并且有4个读取器和一个写入器,这怎么可能?

问题2:在日志消息中,我看到检查点经常工作,但只是有时报告SQLITE_BUSY。如果它有时有效,但不是总是有效,我应该担心吗?这会破坏数据库吗?

问题3:我应该不使用sqlite3_wal_checkpoint_v2或SQLITE_CHECKPOINT_FULL?

完整的检查点要求没有并发的读或写程序。

您可以尝试增加繁忙超时,但如果您尝试定期执行检查点,则可以忽略单个失败。