同時実行制御

URL: https://www.kkaneko.jp/tools/sqlitedb/10.html

SQLite 3 のロック

SQLite 3 の同時実行制御は,データベースファイル単位のロックで行われる. 既定のロールバックジャーナルモードでは,ロックの状態は UNLOCKED, SHARED, RESERVED, PENDING, EXCLUSIVE の 5 つである.

ロックが取得できないとき,SQLite 3 は SQLITE_BUSY を返す. 待ち時間はミリ秒単位で設定できる.

PRAGMA busy_timeout = 5000;

WAL モード

WAL (write-ahead log) モードでは,変更が別のログファイルに追記される. そのため,読み手と 1 つの書き手が同時に動作できる.読み手は書き手をブロックせず,書き手は読み手をブロックしない.

PRAGMA journal_mode = WAL;

* WAL モードの設定はデータベースファイルに保存されるので,接続ごとに指定する必要はない.

トランザクションの種類

【参考】