There was one cause: a missing NEW COLUMN.
Adding a new column in a live system is not decoration. It is an operation that can break queries, block migrations, and slow production traffic if done wrong. Databases handle schema changes differently. Some can add a column instantly. Others rewrite the full table. Knowing the mechanics is the difference between a smooth deploy and a firefight under the pager’s scream.
In PostgreSQL, ALTER TABLE ADD COLUMN is fast if no default or non-null constraint is set. PostgreSQL writes metadata only. But if you add a default with NOT NULL, it rewrites the table. That locks the table and spikes I/O. Mitigation: add the column as nullable, backfill in small batches, then set constraints.
In MySQL, ALTER TABLE can block reads and writes unless run with online DDL. The ALGORITHM=INPLACE or ALGORITHM=INSTANT flags control this. Choose carefully—storage engine, version, and column type all matter.