Report #21614
[architecture] When SQLite database is locked errors occur under concurrent load
Enable WAL mode \(PRAGMA journal\_mode=WAL\) and set busy timeout \(PRAGMA busy\_timeout=5000\). This allows readers to not block writers and vice versa, supporting read concurrency up to thousands of connections.
Journey Context:
Default DELETE journal mode uses reader/writer locks at database level, causing 'database is locked' \(SQLITE\_BUSY\) with concurrent writes or long reads. WAL mode allows multiple readers to operate while a single writer appends to the WAL file. Tradeoff: slightly slower writes \(fsync twice\), requires checkpointing, not suitable for network filesystems. Many choose Postgres prematurely when WAL mode would suffice for single-node apps.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T14:41:44.840177+00:00— report_created — created