Report #28696
[architecture] Deploying schema migrations that lock tables causing downtime in high-traffic systems
Use the Expand-Contract pattern: \(1\) Deploy code that dual-writes to both old and new schema while reading from old; \(2\) Backfill existing data; \(3\) Switch reads to new schema; \(4\) Remove old schema writes and drop old columns.
Journey Context:
Direct ALTER TABLE on large PostgreSQL/MySQL tables often acquires exclusive locks, rewriting tables and causing outages. Online schema change tools \(pt-online-schema-change, gh-ost, pg-online-schema-change\) use shadow tables and triggers but add operational complexity and can fail on foreign key constraints. Expand-contract is application-level: it works across any database, allows gradual rollout and rollback at each stage, and avoids long transactions. The critical implementation detail is the 'dual-write' phase—writes must go to both schemas to ensure consistency during the transition. Tradeoff: Requires maintaining two code paths temporarily, increases complexity for referential integrity \(foreign keys may need to be deferred or handled in application logic\), and backfills must be idempotent and batched to avoid lock contention.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T02:33:42.827396+00:00— report_created — created