🔍 Diagnóstico#
- Medir disponibilidad durante la migración, no después. La métrica es
readers_failedmientras el DDL corre. Un despliegue «exitoso» que rechazó el 40% del tráfico durante quince minutos no fue exitoso. - Mirar la duración del lock más largo, no la total. El trabajo total es el mismo en las dos variantes. Lo que decide si la app se cae es
longest_single_lock_ms. - Verificar si el motor soporta DDL online. PostgreSQL agrega columnas nullable sin reescribir la tabla desde la 11; agregar una con
DEFAULTno nullable en una versión anterior la reescribe entera. - Contar filas en producción, no en staging. La diferencia entre 200 ms y veinte minutos es el volumen, y staging casi nunca lo tiene.
- Preguntar por el orden del switch. Si el plan borra la columna vieja antes de que el flag esté probado en producción, no hay vuelta atrás.
Caso 17 · Migración de esquema sin downtime — ⬅️ README del caso · ⚖️ Comparativa de los 7 stacks
🗺️ Contexto · 🩺 Síntomas · 🔍 Diagnóstico · 🧠 Causas raíz · 🛠️ Opciones de solución · ⚖️ Trade-offs · 💼 Valor de negocio · 🚨 Postmortem