0
int iReturn = sqlite3_wal_checkpoint_v2(m_poDB, NULL, SQLITE_CHECKPOINT_FULL, &iSizeOfWalLog, &iNumOfCheckpointedFrames);

iReturn = 5 (SQLITE_BUSY) で戻ります。ライターはときどき起動し、データベースに多数の行を追加または削除し、チェックポイントを実行して、再びスリープ状態になります。

質問 1: WAL モードを使用し、4 つのリーダーと 1 つのライターがある場合、どのようにそれが可能ですか?

質問 2: ログ メッセージで、チェックポイントは頻繁に機能するが、SQLITE_BUSY を報告するのはたまにしかないことを確認しました。時々機能するが、常に機能しない場合は心配する必要がありますか? これによりデータベースが破損する可能性はありますか?

質問 3: sqlite3_wal_checkpoint_v2 または SQLITE_CHECKPOINT_FULL を使用すべきではありませんか?

4

1 に答える 1

0

完全なチェックポイントでは、同時リーダーまたはライターが存在しないことが必要です。

ビジー タイムアウトを増やしてみることもできますが、チェックポイントを定期的に実行しようとすると、単一の障害を無視してしまう可能性があります。

于 2015-07-08T10:41:27.863 に答える