{"id":21231,"date":"2026-09-01T11:49:31","date_gmt":"2026-09-01T09:49:31","guid":{"rendered":"https:\/\/webhosting.de\/mariadb-instant-add-column-ohne-downtime-schemaupdate-datenbank\/"},"modified":"2026-09-01T11:49:31","modified_gmt":"2026-09-01T09:49:31","slug":"mariadb-anadir-una-columna-al-instante-sin-tiempo-de-inactividad-actualizacion-del-esquema-de-la-base-de-datos","status":"publish","type":"post","link":"https:\/\/webhosting.de\/es\/mariadb-instant-add-column-ohne-downtime-schemaupdate-datenbank\/","title":{"rendered":"MariaDB Instant ADD COLUMN: cambios en el esquema sin tiempo de inactividad para bases de datos modernas"},"content":{"rendered":"<p>MariaDB incorpora, con Instant ADD COLUMN, una t\u00e9cnica que me permite a\u00f1adir nuevas columnas a tablas InnoDB de gran tama\u00f1o en tiempo real, sin bloqueos significativos y sin tiempo de inactividad. El algoritmo INSTANT no sobrescribe datos, sino que simplemente ampl\u00eda <strong>Metadatos<\/strong> y, de este modo, genera nuevas columnas con valores predeterminados.<\/p>\n\n<h2>Puntos centrales<\/h2>\n\n<p>Las siguientes ideas clave me ayudan a evaluar r\u00e1pidamente las posibilidades que ofrecen las operaciones instant\u00e1neas y a tomar las decisiones adecuadas para los sistemas productivos. Resumo los aspectos m\u00e1s importantes y los relaciono con las tareas t\u00edpicas de administraci\u00f3n. A partir de la interacci\u00f3n entre la versi\u00f3n, el dise\u00f1o de las tablas y la estrategia de DDL, deduzco pasos concretos a seguir. La lista sirve como nota compacta para el d\u00eda a d\u00eda <strong>Base de datos<\/strong> Administraci\u00f3n. Tras la visi\u00f3n general, profundizar\u00e9 en la implementaci\u00f3n, las dificultades y los ejemplos pr\u00e1cticos.<\/p>\n\n<ul>\n  <li><strong>Tiempo de inactividad<\/strong> Minimizar: nuevas columnas en milisegundos sin necesidad de reconstruir ni realizar copias.<\/li>\n  <li><strong>DDL en l\u00ednea<\/strong> Para un control seguro: especificar expl\u00edcitamente ALGORITHM=INSTANT y LOCK=NONE.<\/li>\n  <li><strong>Versi\u00f3n<\/strong> Nota: 10.3 solo la \u00faltima columna; a partir de la versi\u00f3n 10.4, posiciones flexibles y m\u00e1s.<\/li>\n  <li><strong>Metadatos<\/strong> En lugar de datos: sin reescritura f\u00edsica, proporcionar valores por defecto de forma l\u00f3gica.<\/li>\n  <li><strong>Escala<\/strong> Facilitar: menor retraso en la replicaci\u00f3n y implementaciones planificables.<\/li>\n<\/ul>\n\n<p>Estos puntos solo surten efecto realmente cuando compruebo aspectos como la compatibilidad con ROW_FORMAT o los \u00edndices especiales y los verifico mediante pruebas. De este modo, mantengo bajo control los cambios en tablas grandes y me mantengo al d\u00eda incluso en momentos de m\u00e1xima carga. <strong>capaz de actuar<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/mariadb-schemaaenderung-1456.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Por qu\u00e9 Instant ADD COLUMN cambia las reglas del juego<\/h2>\n\n<p>Antes, un cl\u00e1sico significaba <code>ALTER TABLE ... ADD COLUMN<\/code> a menudo procesos de copia que duran horas, bloqueos que impiden el acceso y una ralentizaci\u00f3n notable <strong>Tiempo de inactividad<\/strong>. Esto no encajaba bien con los lanzamientos \u00e1giles y las aplicaciones que funcionan las 24 horas del d\u00eda, los 7 d\u00edas de la semana, en las que cada ventana de mantenimiento resulta costosa. Con el algoritmo INSTANT, el esfuerzo pasa del nivel de datos al nivel de cat\u00e1logo, lo que hace que los cambios sean extremadamente r\u00e1pidos, incluso con miles de millones de l\u00edneas. Puedo implementar nuevos atributos en tiempo real sin interrumpir la carga de trabajo en curso. Esto me da libertad para realizar iteraciones r\u00e1pidas y <strong>Publique<\/strong>-Frecuencia de reloj.<\/p>\n\n<p>Desde el punto de vista operativo, se reducen los riesgos y el esfuerzo de coordinaci\u00f3n, ya que ya no tengo que planificar grandes modificaciones. Este enfoque repercute directamente en la replicaci\u00f3n, las ventanas de copia de seguridad y el funcionamiento de las aplicaciones. Donde antes un equipo coordinaba intervenciones nocturnas, hoy en d\u00eda suele bastar con un peque\u00f1o cambio acompa\u00f1ado de un plan de implementaci\u00f3n bien definido. Esto me permite probar ideas de producto m\u00e1s r\u00e1pidamente y ponerlas en producci\u00f3n. As\u00ed, el mantenimiento de bases de datos se convierte en un <strong>Palancas de crecimiento<\/strong>.<\/p>\n\n<h2>As\u00ed funciona el algoritmo INSTANT \u00abbajo el cap\u00f3\u00bb<\/h2>\n\n<p>La idea b\u00e1sica es sencilla: InnoDB ampl\u00eda la descripci\u00f3n de la tabla y a\u00f1ade una entrada especial en el \u00edndice de cl\u00faster, en lugar de acceder f\u00edsicamente a cada fila. De este modo, las nuevas columnas existen de forma l\u00f3gica y, al leer los datos, el motor devuelve el valor por defecto o uno almacenado <strong>Valor<\/strong>. Esta modificaci\u00f3n requiere un tiempo de O(1) en funci\u00f3n del n\u00famero de registros, ya que no se reescriben p\u00e1ginas. Los \u00edndices secundarios permanecen inalterados, lo que evita una carga adicional de E\/S. Me beneficio de bloqueos muy breves, una E\/S m\u00ednima y un tama\u00f1o muy reducido <strong>Transacciones<\/strong>.<\/p>\n\n<p>En cuanto introduzco datos en la nueva columna, InnoDB almacena esos valores como de costumbre. Hasta ese momento, solo se trata de una ampliaci\u00f3n virtual de la estructura. Precisamente por eso es posible ampliar muchos esquemas en producci\u00f3n sin que se produzcan interrupciones en el servicio. Tengo en cuenta que ciertas combinaciones de formatos y caracter\u00edsticas pueden impedir el uso de \u00abInstant\u00bb. Una r\u00e1pida comprobaci\u00f3n previa me ahorra problemas posteriores <strong>Sorpresas<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/mariadb_schema_aenderung_2843.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Versiones, formatos y l\u00edmites<\/h2>\n\n<p>En MariaDB 10.3 solo puedo a\u00f1adir la nueva columna al final de la tabla de forma instant\u00e1nea; si especifico una posici\u00f3n, la operaci\u00f3n recurre a un algoritmo m\u00e1s lento. A partir de MariaDB 10.4, un formato de datos ampliado permite realizar inserciones en casi cualquier posici\u00f3n, utilizar la instrucci\u00f3n DROP COLUMN de forma instant\u00e1nea y modificar el orden de las columnas. No son compatibles determinados formatos de fila, como <code>ROW_FORMAT=COMPRESSED<\/code>, y los \u00edndices especiales pueden generar restricciones. Adem\u00e1s, compruebo si <code>innodb_instant_alter_column_allowed<\/code> limita el funcionamiento. Solo cuando la versi\u00f3n, el formato y las variables coinciden, INSTANT me ofrece el resultado esperado <strong>Beneficio<\/strong>.<\/p>\n\n<p>Una r\u00e1pida reflexi\u00f3n sobre la realidad puede ser de ayuda: <code>SELECT VERSION();<\/code>, <code>SHOW CREATE TABLE ...;<\/code> y un seco <code>ALTER TABLE ... ADD COLUMN ... ALGORITHM=INSTANT, LOCK=NONE;<\/code> en el entorno de staging. Si veo un mensaje de error, bloqueo el cambio en el entorno de producci\u00f3n y ajusto el dise\u00f1o o las opciones. De esta forma evito reconstrucciones no deseadas y los picos de carga resultantes. Este paso previo resulta especialmente \u00fatil con tablas muy grandes. Prefiero tomar la decisi\u00f3n en el entorno de prueba antes que en <strong>Impresi\u00f3n de producci\u00f3n<\/strong>.<\/p>\n\n<h2>L\u00edmites en detalle: tipos de datos, valores por defecto y casos especiales<\/h2>\n\n<p>Para que INSTANT funcione, las definiciones de segmentaci\u00f3n deben cumplir ciertas reglas. Una regla general que ha demostrado su eficacia es: <strong>Valores predeterminados sencillos y constantes<\/strong> funcionan, pero las expresiones complejas a menudo no. As\u00ed que pongo <code>DEFAULT NULL<\/code> o un valor literal claro (n\u00famero, cadena), pero evita llamadas a funciones como <code>NOW()<\/code>, <code>UUID()<\/code> o expresiones dependientes. En el caso de los tipos de texto y de tipo \u00abblob\u00bb, se aplican restricciones adicionales seg\u00fan la versi\u00f3n; no me f\u00edo de mi intuici\u00f3n, sino que realizo pruebas con un volcado de entorno de pruebas realista.<\/p>\n\n<p>No todos los tipos de atributos son adecuados para un inicio \u201einstant\u00e1neo\u201c: una columna con <code>AUTO_INCREMENT<\/code> introducir, y adem\u00e1s, de una vez, un <strong>\u00cdndice \u00fanico<\/strong> construirlas o colocarlas directamente en un <strong>Clave externa<\/strong> Si se utiliza esto, se sale r\u00e1pidamente de la ruta \u00abInstant\u00bb. En esos casos, divido el cambio en varios pasos: primero la columna (INSTANT) y, despu\u00e9s, el \u00edndice o la restricci\u00f3n (normalmente INPLACE). <strong>Generadas<\/strong> o <strong>virtual<\/strong> Las columnas las compruebo por separado; dependiendo del formato y del motor, se aplican distintos algoritmos. El juego de caracteres y <strong>Colaci\u00f3n<\/strong> Lo especifico expresamente para evitar sorpresas posteriores en las ordenaciones o comparaciones.<\/p>\n\n<p>Tambi\u00e9n <strong>Cambios de posici\u00f3n<\/strong> Dependen de la versi\u00f3n: en la 10.3 tengo que colocar las columnas al final, mientras que a partir de la 10.4 tengo pr\u00e1cticamente total libertad. No obstante, presto atenci\u00f3n a los ORM y las herramientas que se refieren a las columnas por su posici\u00f3n ordinal; en esos casos, un simple desplazamiento sin copia de los datos puede provocar errores l\u00f3gicos. Por lo tanto, no solo planifico la posici\u00f3n desde el punto de vista t\u00e9cnico, sino tambi\u00e9n teniendo en cuenta el c\u00f3digo de la aplicaci\u00f3n.<\/p>\n\n<h2>Buenas pr\u00e1cticas: implementaci\u00f3n segura<\/h2>\n\n<p>Siempre redacto las DDL de forma expl\u00edcita para evitar casos de reserva poco claros. Con <code>ALGORITMO=INSTANT\u00c1NEO<\/code> y <code>BLOQUEO=NINGUNO<\/code> obligar\u00e9 a MariaDB a utilizar la variante r\u00e1pida o obtendr\u00e9 una contradicci\u00f3n clara. \u00bfLa columna <code>NOT NULL<\/code>, establezco un valor por defecto adecuado para que las l\u00edneas antiguas sean l\u00f3gicamente correctas <strong>Valores<\/strong> entregar. Antes del despliegue, mido en el entorno de staging las latencias, el comportamiento de la replicaci\u00f3n y la duraci\u00f3n de los bloqueos. Adem\u00e1s, registro la modificaci\u00f3n de forma clara en el registro de cambios de la <strong>Base de datos<\/strong>.<\/p>\n\n<p>Los ejemplos pr\u00e1cticos son de gran ayuda en la vida cotidiana: <code>ALTER TABLE orders ADD COLUMN marketing_tag VARCHAR(40) DEFAULT '' NOT NULL ALGORITHM=INSTANT, LOCK=NONE;<\/code>. O para la versi\u00f3n 10.4 o posterior: <code>ALTER TABLE users ADD COLUMN plan INT DEFAULT 0 NOT NULL AFTER status ALGORITHM=INSTANT, LOCK=NONE;<\/code>. En ambos casos, compruebo previamente que las opciones de la tabla tengan un ROW_FORMAT compatible. Durante la ejecuci\u00f3n, vigilo m\u00e9tricas como Threads_running y E\/S. Tras el cambio, verifico las consultas que utilizan la nueva columna de forma inmediata <strong>use<\/strong>.<\/p>\n\n<h2>Patrones de migraci\u00f3n seguros con \u00abbackfill\u00bb e \u00edndices<\/h2>\n\n<p>En entornos de trabajo, utilizo <strong>de dos etapas<\/strong> Cambios. Paso 1: a\u00f1adir la columna \u00abinstant\u00bb, en primer lugar <code>NULO<\/code>-compatible y con un valor predeterminado claro. Paso 2: actualizar la aplicaci\u00f3n mediante un indicador de funci\u00f3n, de modo que las nuevas operaciones de escritura ya rellenen la columna, mientras que los datos existentes sigan estando vac\u00edos. El <strong>Relleno<\/strong> lo ejecuto de forma as\u00edncrona en peque\u00f1os lotes, por ejemplo, mediante un \u00abworker\u00bb que utiliza <code>UPDATE ... WHERE new_col IS NULL ORDER BY pk LIMIT N<\/code> repite el proceso e intercala pausas entre las series. De este modo, la carga sigue siendo controlable.<\/p>\n\n<p>Si necesito un \u00edndice secundario en la nueva columna, lo desvinculo de la adici\u00f3n de la columna. La creaci\u00f3n del \u00edndice suele ser <strong>INPLACE<\/strong>, pero dura una cantidad de tiempo proporcional al volumen de datos. Al desacoplarlo, evito que el cambio r\u00e1pido de esquema fracase debido a las largas ejecuciones de los \u00edndices. Solo cuando se haya completado el backfill, ejecuto opcionalmente un <code>NOT NULL<\/code>-paso a paso\u2014, pero solo si el algoritmo lo permite sin necesidad de una reconstrucci\u00f3n. Para las reversiones, a menudo basta con desactivar el indicador de funci\u00f3n y dejar la columna sin utilizar hasta que se planifique una reversi\u00f3n completa.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/mariadb-schema-change-downtime-f5b7.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Rendimiento y replicaci\u00f3n<\/h2>\n\n<p>Las operaciones instant\u00e1neas reducen la carga de trabajo que deben soportar las r\u00e9plicas, ya que no se producen procesos de copia masivos. Esto reduce el riesgo de retrasos apreciables y alivia la carga de los procesos que se ejecutan en paralelo <strong>Consultas<\/strong>. En entornos con varias sedes o en cascada, esto desempe\u00f1a un papel decisivo para los objetivos de RTO\/RPO. Quien encuentre la soluci\u00f3n adecuada <a href=\"https:\/\/webhosting.de\/es\/topologias-de-replicacion-de-bases-de-datos-configuracion-de-clusteres-de-alojamiento-escalabilidad-de-bases-de-datos\/\">Topolog\u00edas de replicaci\u00f3n<\/a> permite aplicar los cambios de forma selectiva y estructurar claramente las reversiones. De este modo, el sistema sigue funcionando incluso en momentos de picos de tr\u00e1fico <strong>receptivo<\/strong>.<\/p>\n\n<p>No obstante, tengo en cuenta los formatos de los binlogs y el tama\u00f1o de los eventos para evitar efectos secundarios. Cuando el volumen de escritura es muy elevado, compruebo el estado de los esclavos y la latencia del hilo SQL durante el cambio. Quien necesite realizar auditor\u00edas puede resaltar el cambio de DDL mediante el etiquetado de registros. Las tareas ETL posteriores deben conocer la nueva columna con antelaci\u00f3n, para que las ejecuciones nocturnas no se realicen en vano. Esta coordinaci\u00f3n garantiza una <strong>Procesos<\/strong>.<\/p>\n\n<h2>Caracter\u00edsticas espec\u00edficas de Galera\/Cluster en Instant-DDL<\/h2>\n\n<p>En los cl\u00fasteres con replicaci\u00f3n sincr\u00f3nica (por ejemplo, Galera), las operaciones DDL suelen actuar como <strong>TOI<\/strong>-Evento (Total Order Isolation). INSTANT reduce considerablemente la coordinaci\u00f3n global necesaria para ello, pero aun as\u00ed puede producirse una breve pausa en todo el cl\u00faster. Por eso sigo planificando estos cambios de forma consciente, mantengo las sesiones breves y evito las transacciones simult\u00e1neas de larga duraci\u00f3n que <strong>MDL<\/strong>-podr\u00edan prolongar los bloqueos. Solo recurro a las estrategias RSU (Rolling Schema Upgrade) de forma selectiva cuando es estrictamente necesario desde el punto de vista t\u00e9cnico; la sobrecarga operativa suele ser mayor que los beneficios.<\/p>\n\n<p>Especialmente importante: la implementaci\u00f3n de esquemas y aplicaciones <strong>dirigir<\/strong> Me aseguro de que todos los nodos tengan una visi\u00f3n coherente antes de que se produzcan picos de carga. Evito los problemas de salud y las pruebas de disponibilidad mediante peque\u00f1as ventanas de mantenimiento y criterios de interrupci\u00f3n claros. De este modo, la <strong>Disponibilidad<\/strong> es elevada, a pesar de la serializaci\u00f3n global de DDL.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/MariaDB_Schemaaenderungen1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Planificaci\u00f3n en entornos de alojamiento web<\/h2>\n\n<p>En configuraciones gestionadas o en cl\u00faster, Instant-DDL demuestra todas sus ventajas, ya que ya no tengo que vincular las implementaciones a largas ventanas de mantenimiento. Especialmente con almacenamiento SSD y un alto grado de paralelismo, reduzco los picos de carga en las E\/S y <strong>Cache<\/strong>. Coordino los cambios con las implementaciones de la aplicaci\u00f3n, de modo que los indicadores de funciones y el esquema se activen en secuencia. La supervisi\u00f3n sigue activa, pero las intervenciones son menos frecuentes. El resultado son planes m\u00e1s claros y menos tareas operativas <strong>Riesgos<\/strong>.<\/p>\n\n<p>Adem\u00e1s, tengo en cuenta los horarios de las copias de seguridad y los trabajos por lotes en ejecuci\u00f3n, para que el cambio no se produzca entre la generaci\u00f3n de informes de gran volumen. En escenarios multitenant, coordino si unas bases de datos se actualizan primero y otras despu\u00e9s. Garantizo la coherencia mediante la uniformidad en configuraciones como ROW_FORMAT. De este modo, evito sorpresas si m\u00e1s adelante se necesitan m\u00e1s columnas. La planificaci\u00f3n supone aqu\u00ed un ahorro notable. <strong>Gastos<\/strong>.<\/p>\n\n<h2>Ejemplos pr\u00e1cticos extra\u00eddos de proyectos<\/h2>\n\n<p>Una tienda necesita un campo de segmento de clientes a corto plazo para una campa\u00f1a; a\u00f1ado la columna mediante INSTANT y el departamento de marketing puede rellenarla de inmediato. Una tabla de registro recoge nuevos par\u00e1metros t\u00e9cnicos; a\u00f1ado la columna a lo largo del d\u00eda, mientras se siguen realizando cientos de operaciones de escritura por segundo y la aplicaci\u00f3n <strong>respuestas<\/strong>. En un sistema de generaci\u00f3n de informes, incorporo m\u00e1s campos de KPI sin poner en riesgo los cierres diarios. Adem\u00e1s, los requisitos normativos se pueden implementar m\u00e1s r\u00e1pidamente si los campos de auditor\u00eda se incorporan sin necesidad de reconstruir el sistema. Estas peque\u00f1as medidas aportan resultados r\u00e1pidos <strong>Resultados<\/strong>.<\/p>\n\n<p>En todos los casos, compruebo despu\u00e9s las estad\u00edsticas y reviso muestras espec\u00edficas. Compruebo si los ORM o las herramientas de migraci\u00f3n tienen en cuenta la columna de inmediato. Las cach\u00e9s y los scripts de migraci\u00f3n deben conocer la nueva estructura para que no se produzcan interpretaciones err\u00f3neas. Para equipos m\u00e1s grandes, documento el cambio en un manual de procedimientos. De este modo, el historial y los motivos de la decisi\u00f3n quedan claramente reflejados. <strong>comprensible<\/strong>.<\/p>\n\n<h2>Soluci\u00f3n de problemas cuando no es instant\u00e1neo<\/h2>\n\n<p>Si un cambio choca con <code>ALGORITMO=INSTANT\u00c1NEO<\/code> , lo primero que hago es buscar formatos incompatibles como <code>ROW_FORMAT=COMPRESSED<\/code> o seg\u00fan \u00edndices especiales. A continuaci\u00f3n, consulto los detalles de la versi\u00f3n: en la 10.3, la posici\u00f3n de la columna obliga a <strong>Fin<\/strong>, a partir del 10.4 habr\u00e1 m\u00e1s flexibilidad. Si la base de datos ofrece una alternativa a INPLACE o COPY, interrumpo el proceso y adapto la estrategia o el esquema. Son relevantes <code>MOSTRAR ADVERTENCIAS<\/code> y <code>Mostrar CREATE TABLE<\/code> para los indicadores de dise\u00f1o. Solo cuando el caso de prueba funcione al instante, planear\u00e9 la puesta en producci\u00f3n <strong>Ejecuci\u00f3n<\/strong>.<\/p>\n\n<p>Tambi\u00e9n tengo en cuenta las fases con gran volumen de transacciones: incluso los bloqueos breves de metadatos pueden causar problemas en los puntos cr\u00edticos si las aplicaciones siguen patrones desfavorables. Con una planificaci\u00f3n m\u00e1s detallada para un intervalo de tiempo m\u00e1s tranquilo, consigo mitigar esos efectos. Adem\u00e1s, compruebo si los desencadenantes, las columnas virtuales o las claves externas tienen efectos secundarios. Realizar comprobaciones minuciosas de antemano ahorra mucho tiempo en caso de incidencia. Mi objetivo sigue siendo que el cambio sea breve, reversible y <strong>Transparente<\/strong> para sostener.<\/p>\n\n<h2>Supervisi\u00f3n y resoluci\u00f3n de problemas durante el funcionamiento<\/h2>\n\n<p>Durante la puesta en marcha, realizo un seguimiento espec\u00edfico <strong>MDL<\/strong>-Tiempos de espera y E\/S. <code>INFORMATION_SCHEMA.PROCESSLIST<\/code> y <code>INFORMATION_SCHEMA.METADATA_LOCKS<\/code> me indican si hay sesiones en espera de DDL. Adem\u00e1s, utilizo <strong>performance_schema<\/strong>-Eventos para correlacionar breves pausas. En las r\u00e9plicas, compruebo la latencia del hilo SQL y el valor de Seconds_Behind_Master para, en caso necesario, limitar los backfills o las implementaciones de aplicaciones. El binlog crece m\u00ednimamente con INSTANT; los valores at\u00edpicos indican pasos posteriores ocultos (por ejemplo, la creaci\u00f3n de \u00edndices).<\/p>\n\n<p>Tras el cambio, lo valido con <code>EXPLICAR<\/code> y lecturas de muestras, para que las consultas detecten correctamente las nuevas columnas. En los paneles de control observo <strong>Threads_running<\/strong>, el contador de manejadores y la tasa de aciertos del grupo de b\u00faferes, para detectar efectos secundarios. Si, a pesar de <code>BLOQUEO=NINGUNO<\/code> Cuando se producen bloqueos, suele deberse a un punto cr\u00edtico de DDL o DML que genera competencia. En esos casos, basta con una breve ventana de mantenimiento o reprogramar la tarea para una fase m\u00e1s tranquila. Interrumpo los errores de forma deliberada, en lugar de recurrir a soluciones de contingencia poco claras; as\u00ed se evitan reconstrucciones tediosas.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/entwicklerdesk_mariadb_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Comparaci\u00f3n de los algoritmos DDL<\/h2>\n\n<p>El siguiente resumen clasifica COPY, INPLACE e INSTANT y me ayuda a evaluar de forma realista los riesgos y la duraci\u00f3n. Adem\u00e1s, eval\u00fao en qu\u00e9 medida se ven afectados los accesos simult\u00e1neos y qu\u00e9 bloqueos pueden producirse. Para comprender mejor los bloqueos, merece la pena echar un vistazo a <a href=\"https:\/\/webhosting.de\/es\/bloqueo-de-filas-en-bases-de-datos-mysql-concurrencia-optimizacion-rendimiento-bloqueos\/\">Bloqueo de filas<\/a> y las repercusiones en el paralelismo. As\u00ed evito tomar decisiones err\u00f3neas en casos cr\u00edticos para la producci\u00f3n <strong>tablas<\/strong>. La tabla se ha simplificado deliberadamente y sirve como una r\u00e1pida <strong>Comparaci\u00f3n<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Algoritmo<\/th>\n      <th>Cerraduras<\/th>\n      <th>Copia de datos<\/th>\n      <th>Duraci\u00f3n (tablas grandes)<\/th>\n      <th>Uso t\u00edpico<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>COPY<\/td>\n      <td>m\u00e1s fuerte <strong>Cerraduras<\/strong><\/td>\n      <td>completa<\/td>\n      <td>largo (hasta horas)<\/td>\n      <td>Cambios incompatibles, cambios de formato<\/td>\n    <\/tr>\n    <tr>\n      <td>INPLACE<\/td>\n      <td>moderado <strong>Cerraduras<\/strong><\/td>\n      <td>parcialmente\/con gran cantidad de metadatos<\/td>\n      <td>medio (de unos minutos a m\u00e1s tiempo)<\/td>\n      <td>Muchas modificaciones en l\u00ednea sin necesidad de una reconstrucci\u00f3n total<\/td>\n    <\/tr>\n    <tr>\n      <td>INSTANT\u00c1NEO<\/td>\n      <td>breve <strong>MDL<\/strong>-Fases<\/td>\n      <td>no (solo metadatos)<\/td>\n      <td>muy breve (de milisegundos a segundos)<\/td>\n      <td>ADD\/DROP COLUMN, cambio de posici\u00f3n (a partir de la versi\u00f3n 10.4)<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Interpreto la tabla como un \u00e1rbol de decisi\u00f3n: si es posible utilizar INSTANT, lo aplico; si no, compruebo INPLACE; solo si ambas opciones fallan, acepto COPY. La combinaci\u00f3n de la estrategia de bloqueo y el algoritmo debe ajustarse al patr\u00f3n de tr\u00e1fico. Especialmente en el caso de aplicaciones con un alto volumen de escritura, me aseguro de antemano de tener una v\u00eda de retorno. De este modo, las implementaciones se mantienen estables incluso bajo presi\u00f3n. <strong>controlable<\/strong>. Si lo aplico de forma sistem\u00e1tica, ahorro mucho <strong>Tiempo<\/strong>.<\/p>\n\n<h2>Compatibilidad de aplicaciones y ORM<\/h2>\n\n<p>Los cambios en el esquema solo son \u201einvisibles\u201c si el c\u00f3digo de la aplicaci\u00f3n los soporta. <strong>SELECCIONAR *<\/strong> y los accesos por posici\u00f3n ordinal son factores de riesgo en cuanto reordeno las columnas (a partir de la versi\u00f3n 10.4) o inserto nuevos campos. Por eso, prefiero listas de columnas expl\u00edcitas, mapeos verificados y el control de versiones de los DTO. Los ORM y los ejecutores de migraciones suelen almacenar metadatos en cach\u00e9; un reinicio \u201een caliente\u201c o un \u00abReprepare\u00bb para las sentencias preparadas evita interpretaciones err\u00f3neas. En entornos de microservicios, coordino las versiones de tal forma que solo las versiones tolerantes est\u00e9n activas al mismo tiempo.<\/p>\n\n<p>En cuanto a la compatibilidad con versiones anteriores, sigo esta regla: primero a\u00f1ado la columna y, despu\u00e9s, implemento el c\u00f3digo que la utiliza de forma opcional; solo cuando todas las instancias se hayan actualizado y se haya completado el backfill, endurezco las restricciones. De este modo, las operaciones de retroceso y avance se realizan con rapidez y el sistema se mantiene robusto. Para las auditor\u00edas, documento la justificaci\u00f3n, la instrucci\u00f3n SQL, la fecha y hora, los criterios de \u00e9xito y el proceso de reversi\u00f3n; esto genera confianza y garantiza la repetibilidad. <strong>Procesos<\/strong>.<\/p>\n\n<h2>Escalabilidad: partici\u00f3n y DDL instant\u00e1neo<\/h2>\n\n<p>La partici\u00f3n y INSTANT se complementan a la perfecci\u00f3n, ya que las unidades f\u00edsicas m\u00e1s peque\u00f1as hacen que las actualizaciones sean a\u00fan m\u00e1s predecibles. Al dividir las tablas de forma l\u00f3gica, limito los puntos de mayor carga y facilito las modificaciones posteriores. Bueno, <a href=\"https:\/\/webhosting.de\/es\/estrategias-de-particionamiento-de-bases-de-datos-alojamiento-de-bases-de-datos-escalables\/\">Estrategias de partici\u00f3n<\/a> ayudan a mantener controlados de forma permanente conjuntos de datos muy grandes. En resumen, consigo latencias m\u00e1s bajas, ventanas de mantenimiento m\u00e1s claras y menos riesgo a la hora de <strong>Cambios<\/strong>. La nueva columna estar\u00e1 disponible m\u00e1s r\u00e1pidamente en todas las particiones pertinentes.<\/p>\n\n<p>Planifico el orden: primero el borrador de la partici\u00f3n, luego los DDL y, por \u00faltimo, los rellenos para los valores opcionales. As\u00ed elimino los conflictos que podr\u00edan surgir al realizar ajustes simult\u00e1neos en los \u00edndices o en el almacenamiento. Tambi\u00e9n en este caso, las pruebas siguen siendo mi herramienta m\u00e1s eficaz. Gracias a unas m\u00e9tricas claras, puedo determinar si el paso es viable en los sistemas de producci\u00f3n. Este enfoque disciplinado evita problemas y mantiene al equipo <strong>concentrado<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/mariadb-schemawechsel-1832.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Recuperaci\u00f3n tras fallos, copias de seguridad y consistencia<\/h2>\n\n<p>INSTANT-DDL solo modifica <strong>Cat\u00e1logo y metadatos<\/strong>. Esto hace que la operaci\u00f3n sea r\u00e1pida y at\u00f3mica. Tras un fallo del sistema, la columna o bien es visible o bien no lo es en absoluto; no se produce ning\u00fan \u201eestado intermedio\u201c. La carga del registro de rehacer\/deshacer sigue siendo m\u00ednima, ya que no se mueven p\u00e1ginas de datos. En cuanto a la replicaci\u00f3n: el evento DDL se transmite correctamente; las r\u00e9plicas no tienen que copiar ninguna fila. Las copias de seguridad f\u00edsicas que se ejecuten durante la modificaci\u00f3n deber\u00edan capturar el breve cambio de metadatos en el momento de la instant\u00e1nea; las herramientas con puntos de control consistentes pueden gestionarlo. Las copias de seguridad l\u00f3gicas incluyen la columna inmediatamente en <code>CREATE TABLE<\/code>-instrucciones, aunque muchas l\u00edneas sigan teniendo el <strong>Por defecto<\/strong> llevar.<\/p>\n\n<p>Es posible realizar varios cambios instant\u00e1neos consecutivos. Sin embargo, procuro no cambiar de posici\u00f3n ni eliminar y volver a crear columnas sin motivo. Los cambios frecuentes en la estructura aumentan el esfuerzo de coordinaci\u00f3n y, en casos extremos, pueden llevar a que, en alg\u00fan momento, resulte conveniente una reconstrucci\u00f3n completa (por ejemplo, cuando sea necesario cambiar de formato). Con un margen de tiempo pragm\u00e1tico para los cambios y una hoja de ruta bien definida, mantengo a raya la deuda t\u00e9cnica.<\/p>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>Con Instant ADD COLUMN realizo cambios en el esquema de tablas de gran tama\u00f1o en tiempo real, modificando \u00fanicamente los metadatos y dejando intactos los bloques de datos. La versi\u00f3n correcta, un ROW_FORMAT compatible y opciones DDL claras como <code>ALGORITMO=INSTANT\u00c1NEO<\/code> y <code>BLOQUEO=NINGUNO<\/code> determinan el \u00e9xito o la necesidad de una reconstrucci\u00f3n. Para el funcionamiento y la replicaci\u00f3n, esto se traduce en menos latencia, implementaciones planificables y un alto <strong>Disponibilidad<\/strong>. Utilizo pruebas, supervisi\u00f3n y una documentaci\u00f3n clara para evitar sorpresas. De este modo, mi base de datos se mantiene flexible y puedo incorporar nuevos requisitos sin interrupciones en el <strong>Funcionamiento en directo<\/strong> de.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubre c\u00f3mo MariaDB Instant ADD COLUMN permite realizar cambios en el esquema sin tiempo de inactividad gracias al algoritmo INSTANT y c\u00f3mo revoluciona la administraci\u00f3n de bases de datos con el DDL en l\u00ednea de MariaDB.<\/p>","protected":false},"author":1,"featured_media":21224,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[781],"tags":[],"class_list":["post-21231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-datenbanken-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"105","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Instant ADD COLUMN","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21224","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/21231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/comments?post=21231"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/21231\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media\/21224"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media?parent=21231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/categories?post=21231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/tags?post=21231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}