Report #77533
[bug\_fix] database or disk is full \(SQLITE\_FULL\) due to unbounded WAL growth
Ensure no long-running read transactions prevent checkpointing by closing cursors promptly, or run PRAGMA wal\_checkpoint\(TRUNCATE\) during maintenance windows. Also set PRAGMA wal\_autocheckpoint to a lower threshold to force checkpoints more frequently.
Journey Context:
An IoT edge device collects sensor data in SQLite with WAL mode enabled. After weeks of uptime, writes fail with SQLite error 13 \(SQLITE\_FULL\) even though the disk shows 2GB free. The -wal file has grown to 3GB, exceeding the remaining space. Investigation reveals a background diagnostics thread that opened a read transaction on app start to calculate averages, but never closed the cursor/statement. This long-running read transaction prevents SQLite from checkpointing \(truncating\) the WAL file, as the WAL must retain all pages back to the oldest active read transaction. Since writes continue, the WAL grows unbounded. The fix is to ensure the diagnostics thread uses short-lived connections or commits/closes transactions immediately. Additionally, the app is modified to run PRAGMA wal\_checkpoint\(RESTART\) nightly during low-activity periods to prevent accumulation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T12:44:34.044437+00:00— report_created — created