PRAGMA 한 줄, 두 자릿수 개선
SQLite 기본 journal 모드는 DELETE: writer 가 reader block 하는 exclusive 락 획득. WAL (Write-Ahead Logging) 모드가 이걸 뒤집어 — reader 와 writer 가 서로 block 안 함. Reader 는 일관된 snapshot 봄, writer 는 log 파일 (db-wal) 에 append, 주기적으로 main DB 로 checkpoint.
DB 마다 한 번 켜 (persistent):
PRAGMA journal_mode = WAL;거의 항상 원하는 이유:
- Reader 가 writer 한테 block 안 됨, 반대도 마찬가지.
- Write 극적으로 빠름 — fsync 적음, sequential append.
- 모든 동시 워크로드의 prerequisite (웹 서버, async 앱, 백그라운드 sync 있는 데스크탑 앱).
Warning: WAL 모드는 제대로 된 file locking 의 진짜 파일시스템 필요. NFS, SMB, FUSE 등 quirky locking 가진 데서는 안전 X. 로컬 디스크만.
WAL 와 합리적 busy_timeout (5–30 초) pair — checkpoint 동안 일시적 lock 에 SQLITE_BUSY 로 실패 안 하고 잠깐 wait.