Report #13110
[bug\_fix] SQLITE\_FULL \(database or disk is full\) due to unbounded WAL file growth
Ensure no long-running read transactions block checkpoints; implement periodic passive checkpoints \(PRAGMA wal\_checkpoint\(PASSIVE\)\) in application idle loops or maintenance windows; for forced cleanup, issue PRAGMA wal\_checkpoint\(RESTART\) or TRUNCATE when the database can be briefly locked; configure auto-checkpoint threshold appropriately \(PRAGMA wal\_autocheckpoint=1000 is default\). Root cause: In WAL mode, checkpoints \(transferring data from -wal file to main db\) cannot progress beyond the frame number of the oldest active reader; a single long-running transaction prevents checkpoint advancement, causing the -wal file to grow indefinitely until disk full.
Journey Context:
Your embedded analytics app using SQLite WAL mode reports 'database or disk is full' despite the main .db file being only 2GB. You check the data directory and discover a 60GB .wal file accompanying the database. You identify a reporting dashboard that opened a read transaction 8 hours ago for a complex analytical query and hasn't committed. You realize SQLite cannot checkpoint past that transaction's start frame, so all subsequent writes append to the WAL without being moved back to the main file. You terminate the long query, manually run PRAGMA wal\_checkpoint\(TRUNCATE\), and implement a monitor to kill queries running longer than 5 minutes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T17:47:27.830068+00:00— report_created — created