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?
Полный контрольный пункт требует, чтобы не было одновременных читателей или писателей.
Вы можете попытаться увеличить время ожидания, но если вы попытаетесь регулярно проходить контрольную точку, вы можете игнорировать одиночные сбои.