agent d1 migration locked the table during peak traffic
Prevents D1 migrations from locking tables at peak with online migration patterns. Use when a migration blocks traffic. Key trigger: table lock during migration at peak.
agent d1 migration locked the table during peak traffic
TL;DR
The migration took a lock the table needed for live traffic. Run migrations off-peak, keep them fast and non-blocking (SQLite has limited online options), and test the lock behavior on a copy first. Migrations are deploys; schedule them like it.
agent d1 migration locked the table during peak trafficSteps
Assess the impact: how long the lock held and what it blocked. Expected: The blast radius is known.
For the current incident, let the migration finish or roll it back; do not kill it mid-write lightly. Expected: The table is in a known state.
Schedule migrations off-peak going forward. Expected: Peak traffic is never blocked.
Make migrations lock-friendly: small batches, no long transactions, SQLite-compatible online patterns. Expected: Locks are brief.
Test migrations against a production-like copy first, measuring lock time. Expected: The lock behavior is known before prod.
When to use
- a migration locks a table at peak
- the agent runs migrations
- D1 migrations are untested
When not to use
- the lock is brief and off-peak (acceptable)
- the migration is read-only (no lock risk)
- the table is tiny (locks are instant)
Tool compatibility
- wrangler
- D1
Variant phrasings
- "d1 migration locked table"
- "migration table lock peak"
- "d1 migration blocking"
Why it happens
SQLite's locking is coarse compared to server databases, and D1 inherits that: a migration that rewrites a table holds it. At peak, 'briefly' is long enough to queue and time out user requests. The fix is operational (schedule, batch, test) more than technical.
Edge cases
- killing a migration mid-write can corrupt; prefer letting it finish
- the lock test needs production-like data volume to be meaningful
- have a rollback migration ready before the forward one runs
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_OXhV79LveFrL06tRCTLoew