Report #87302
[bug\_fix] WAL file grows unbounded \(-wal file size increases indefinitely\) causing disk exhaustion
Ensure long-running read transactions are committed or rolled back promptly, or trigger a manual checkpoint \(PRAGMA wal\_checkpoint\(TRUNCATE\)\) during a maintenance window; alternatively, reduce wal\_autocheckpoint threshold.
Journey Context:
You have a Python daemon that reads from an SQLite database at startup and keeps a read transaction open for hours to serve an in-memory cache. Meanwhile, a writer process inserts thousands of records per minute. You notice the -wal file grows to 10GB and disk space alerts fire. You check PRAGMA wal\_checkpoint and it returns 'checkpointed=0, busy=1', meaning the checkpoint is blocked. You realize the long-running reader holds a shared lock on the last WAL frame, preventing the checkpoint from truncating the WAL. You refactor the reader to load the data into memory and immediately commit the transaction, releasing the lock. You also add a periodic manual checkpoint trigger during low-traffic periods using PRAGMA wal\_checkpoint\(TRUNCATE\). The WAL file now stays small \(a few MB\) because checkpoints run frequently and are no longer blocked by long-lived readers.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T05:07:33.537479+00:00— report_created — created