{"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-adicionar-coluna-instantaneamente-sem-tempo-de-inatividade-atualizacao-do-esquema-da-base-de-dados","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/mariadb-instant-add-column-ohne-downtime-schemaupdate-datenbank\/","title":{"rendered":"MariaDB Instant ADD COLUMN: Altera\u00e7\u00f5es no esquema sem tempo de inatividade para bases de dados modernas"},"content":{"rendered":"<p>O MariaDB apresenta o Instant ADD COLUMN, uma t\u00e9cnica que me permite adicionar novas colunas a grandes tabelas InnoDB em tempo real \u2014 sem bloqueios significativos e sem tempo de inatividade. O algoritmo INSTANT n\u00e3o reescreve dados, limitando-se apenas a expandir <strong>Metadados<\/strong> e, assim, gera novas colunas com valores por defeito.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<p>As seguintes ideias-chave ajudam-me a avaliar rapidamente as possibilidades das opera\u00e7\u00f5es instant\u00e2neas e a tomar as decis\u00f5es certas para sistemas produtivos. Resumo os aspetos mais importantes e relaciono-os com tarefas t\u00edpicas de administra\u00e7\u00e3o. A partir da intera\u00e7\u00e3o entre a vers\u00e3o, o layout das tabelas e a estrat\u00e9gia de DDL, deduzo passos concretos a seguir. A lista serve como um resumo conciso para o dia-a-dia <strong>Base de dados<\/strong> Administra\u00e7\u00e3o. Ap\u00f3s esta vis\u00e3o geral, abordarei mais detalhadamente a implementa\u00e7\u00e3o, as dificuldades e os exemplos pr\u00e1ticos.<\/p>\n\n<ul>\n  <li><strong>Tempo de inatividade<\/strong> Minimizar: Novas colunas em mil\u00e9simos de segundo, sem necessidade de reconstru\u00e7\u00e3o nem processos de c\u00f3pia.<\/li>\n  <li><strong>DDL online<\/strong> para garantir um funcionamento seguro: especificar explicitamente ALGORITHM=INSTANT e LOCK=NONE.<\/li>\n  <li><strong>Vers\u00e3o<\/strong> Nota: 10.3 apenas a \u00faltima coluna; a partir da vers\u00e3o 10.4, posi\u00e7\u00f5es flex\u00edveis e muito mais.<\/li>\n  <li><strong>Metadados<\/strong> em vez de dados: sem reescrita f\u00edsica, fornecer valores padr\u00e3o de forma l\u00f3gica.<\/li>\n  <li><strong>Escalonamento<\/strong> facilitar: menor atraso na replica\u00e7\u00e3o e implementa\u00e7\u00f5es plane\u00e1veis.<\/li>\n<\/ul>\n\n<p>Estes pontos s\u00f3 surtem efeito quando verifico compatibilidades como o ROW_FORMAT ou \u00edndices especiais e as testo. Desta forma, mantenho as altera\u00e7\u00f5es em tabelas de grande dimens\u00e3o sob controlo e consigo lidar com picos de carga <strong>capaz de atuar<\/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 que \u00e9 que o Instant ADD COLUMN altera as regras do jogo<\/h2>\n\n<p>Antigamente, um cl\u00e1ssico significava <code>ALTER TABLE ... ADD COLUMN<\/code> frequentemente processos de c\u00f3pia que duram horas, bloqueios que impedem o funcionamento e lentid\u00e3o percet\u00edvel <strong>Tempo de inatividade<\/strong>. Isso n\u00e3o se coadunava bem com lan\u00e7amentos \u00e1geis e aplica\u00e7\u00f5es 24 horas por dia, 7 dias por semana, em que cada janela de manuten\u00e7\u00e3o \u00e9 dispendiosa. Com o algoritmo INSTANT, o esfor\u00e7o passa do n\u00edvel dos dados para o n\u00edvel do cat\u00e1logo, o que torna as altera\u00e7\u00f5es extremamente r\u00e1pidas, mesmo com milhares de milh\u00f5es de linhas. Posso disponibilizar novos atributos em tempo real, sem interromper a carga em execu\u00e7\u00e3o. Isso d\u00e1-me margem para itera\u00e7\u00f5es r\u00e1pidas e <strong>Liberta\u00e7\u00e3o<\/strong>-Frequ\u00eancia de rel\u00f3gio.<\/p>\n\n<p>Do ponto de vista operacional, os riscos e os esfor\u00e7os de coordena\u00e7\u00e3o diminuem, porque j\u00e1 n\u00e3o preciso de planear grandes remodela\u00e7\u00f5es. Esta abordagem tem um impacto direto na replica\u00e7\u00e3o, nas janelas de c\u00f3pia de seguran\u00e7a e no funcionamento das aplica\u00e7\u00f5es. Onde antes uma equipa coordenava interven\u00e7\u00f5es noturnas, hoje basta, muitas vezes, uma pequena altera\u00e7\u00e3o acompanhada de um plano de implementa\u00e7\u00e3o bem definido. Isto permite-me testar ideias de produtos mais rapidamente e coloc\u00e1-las em produ\u00e7\u00e3o. Assim, a manuten\u00e7\u00e3o da base de dados transforma-se num <strong>Alavancas de crescimento<\/strong>.<\/p>\n\n<h2>\u00c9 assim que o algoritmo INSTANT funciona nos bastidores<\/h2>\n\n<p>O princ\u00edpio \u00e9 simples: o InnoDB amplia a descri\u00e7\u00e3o da tabela e adiciona uma entrada especial no \u00edndice de cluster, em vez de aceder fisicamente a cada linha. Assim, as novas colunas existem logicamente e, durante a leitura, o motor fornece ou o valor predefinido ou um valor guardado <strong>Valor<\/strong>. Esta altera\u00e7\u00e3o tem um custo de tempo O(1) em rela\u00e7\u00e3o ao n\u00famero de registos, uma vez que n\u00e3o s\u00e3o reescritas quaisquer p\u00e1ginas. Os \u00edndices secund\u00e1rios permanecem inalterados, o que evita trabalho adicional de E\/S. Beneficio de bloqueios mais curtos, E\/S m\u00ednima e muito pequenas <strong>Transac\u00e7\u00f5es<\/strong>.<\/p>\n\n<p>Assim que introduzo dados na nova coluna, o InnoDB armazena esses valores como habitualmente. At\u00e9 l\u00e1, trata-se apenas de um aumento virtual da estrutura. \u00c9 precisamente por isso que muitos esquemas em produ\u00e7\u00e3o podem ser ampliados sem perturba\u00e7\u00f5es no funcionamento. Tenho em conta que certas combina\u00e7\u00f5es de formatos e funcionalidades podem impedir o Instant. Uma verifica\u00e7\u00e3o r\u00e1pida antecipada poupa-me problemas posteriores <strong>Surpresas<\/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>Vers\u00f5es, formatos e limites<\/h2>\n\n<p>No MariaDB 10.3, s\u00f3 consigo adicionar a nova coluna instantaneamente no final da tabela; se indicar uma posi\u00e7\u00e3o, a opera\u00e7\u00e3o recorre a um algoritmo mais lento. A partir do MariaDB 10.4, um formato de dados alargado permite inser\u00e7\u00f5es em praticamente qualquer ponto, a execu\u00e7\u00e3o instant\u00e2nea do comando `DROP COLUMN` e altera\u00e7\u00f5es na ordem das colunas. S\u00e3o incompat\u00edveis determinados formatos de linha, tais como <code>ROW_FORMAT=COMPRESSED<\/code>, e os \u00edndices especiais podem criar restri\u00e7\u00f5es. Al\u00e9m disso, verifico se <code>innodb_instant_alter_column_allowed<\/code> limita o comportamento. S\u00f3 quando a vers\u00e3o, o formato e as vari\u00e1veis est\u00e3o corretos \u00e9 que o INSTANT me fornece o resultado esperado <strong>Benef\u00edcio<\/strong>.<\/p>\n\n<p>Uma r\u00e1pida avalia\u00e7\u00e3o da realidade ajuda: <code>SELECT VERSION();<\/code>, <code>SHOW CREATE TABLE ...;<\/code> e um seco <code>ALTER TABLE ... ADD COLUMN ... ALGORITHM=INSTANT, LOCK=NONE;<\/code> no ambiente de staging. Quando vejo uma mensagem de erro, bloqueio a altera\u00e7\u00e3o no ambiente de produ\u00e7\u00e3o e ajusto o design ou as op\u00e7\u00f5es. Desta forma, evito reconstru\u00e7\u00f5es indesejadas e os picos de carga da\u00ed resultantes. Especialmente no caso de tabelas muito grandes, esta medida preventiva compensa. Prefiro tomar a decis\u00e3o no ambiente de teste do que em <strong>Impress\u00e3o de produ\u00e7\u00e3o<\/strong>.<\/p>\n\n<h2>Limites em pormenor: tipos de dados, valores predefinidos e casos especiais<\/h2>\n\n<p>Para que o INSTANT funcione, as defini\u00e7\u00f5es de divis\u00e3o t\u00eam de respeitar determinadas regras. A regra geral que se tem revelado eficaz \u00e9 a seguinte: <strong>predefini\u00e7\u00f5es simples e constantes<\/strong> funcionam, mas as express\u00f5es complexas muitas vezes n\u00e3o. Por isso, coloco <code>DEFAULT NULL<\/code> ou um valor literal claro (n\u00famero, cadeia de caracteres), mas evita chamadas de fun\u00e7\u00f5es como <code>NOW()<\/code>, <code>UUID()<\/code> ou express\u00f5es dependentes. No caso de tipos de texto e do tipo blob, aplicam-se restri\u00e7\u00f5es adicionais, dependendo da vers\u00e3o; n\u00e3o me baseio na intui\u00e7\u00e3o, mas sim em testes realizados com um dump de staging realista.<\/p>\n\n<p>Nem todos os tipos de atributos s\u00e3o adequados para um arranque \u201einstant\u00e2neo\u201c: uma coluna com <code>AUTO_INCREMENT<\/code> introduzir, e j\u00e1 de seguida mais um <strong>\u00cdndice \u00fanico<\/strong> construir ou inseri-las diretamente num <strong>Chave Estrangeira<\/strong> A utiliza\u00e7\u00e3o desta op\u00e7\u00e3o afasta-nos rapidamente do caminho \u00abInstant\u00bb. Nesses casos, divido a altera\u00e7\u00e3o em v\u00e1rias etapas: primeiro a coluna (INSTANT) e, em seguida, o \u00edndice\/restri\u00e7\u00e3o (normalmente INPLACE). <strong>Geradas<\/strong> ou <strong>virtual<\/strong> Verifico as colunas separadamente; dependendo da impress\u00e3o e do motor, s\u00e3o utilizados algoritmos diferentes. Conjunto de caracteres e <strong>Cola\u00e7\u00e3o<\/strong> Especifico isso explicitamente para evitar surpresas posteriores nas ordena\u00e7\u00f5es ou compara\u00e7\u00f5es.<\/p>\n\n<p>Tamb\u00e9m <strong>Altera\u00e7\u00f5es de posi\u00e7\u00e3o<\/strong> continuam a depender da vers\u00e3o: na 10.3, sou obrigado a colocar as colunas no final; a partir da 10.4, tenho praticamente liberdade total. No entanto, presto aten\u00e7\u00e3o aos ORMs e \u00e0s ferramentas que referenciam as colunas por posi\u00e7\u00e3o ordinal \u2013 nesses casos, um simples deslocamento, mesmo sem c\u00f3pia dos dados, pode causar erros l\u00f3gicos. Por isso, planeio a posi\u00e7\u00e3o n\u00e3o s\u00f3 do ponto de vista t\u00e9cnico, mas tamb\u00e9m tendo em conta o c\u00f3digo da aplica\u00e7\u00e3o.<\/p>\n\n<h2>Boas pr\u00e1ticas: implementa\u00e7\u00e3o segura<\/h2>\n\n<p>Formulo sempre as DDLs de forma expl\u00edcita, para evitar casos de fallback pouco claros. Com <code>ALGORITMO=INSTANT\u00c2NEO<\/code> e <code>LOCK=NENHUM<\/code> ou\u00e7o o MariaDB a utilizar a variante r\u00e1pida ou recebo uma resposta clara em contr\u00e1rio. A coluna <code>N\u00c3O NULO<\/code>, defino um valor predefinido adequado para que as linhas antigas sejam logicamente corretas <strong>Valores<\/strong> fornecer. Antes da implementa\u00e7\u00e3o, avalio no ambiente de staging as lat\u00eancias, o comportamento da replica\u00e7\u00e3o e a dura\u00e7\u00e3o dos bloqueios. Al\u00e9m disso, registo a altera\u00e7\u00e3o de forma clara no registo de altera\u00e7\u00f5es do <strong>Base de dados<\/strong>.<\/p>\n\n<p>Exemplos pr\u00e1ticos \u00fateis ajudam na pr\u00e1tica: <code>ALTER TABLE orders ADD COLUMN marketing_tag VARCHAR(40) DEFAULT '' NOT NULL ALGORITHM=INSTANT, LOCK=NONE;<\/code>. Ou para a vers\u00e3o 10.4+: <code>ALTER TABLE users ADD COLUMN plan INT DEFAULT 0 NOT NULL AFTER status ALGORITHM=INSTANT, LOCK=NONE;<\/code>. Em ambos os casos, verifico previamente as op\u00e7\u00f5es da tabela para garantir que o ROW_FORMAT \u00e9 compat\u00edvel. Durante a execu\u00e7\u00e3o, fico atento a m\u00e9tricas como Threads_running e I\/O. Ap\u00f3s a altera\u00e7\u00e3o, verifico as consultas que utilizam a nova coluna imediatamente <strong>utilizar<\/strong>.<\/p>\n\n<h2>Padr\u00f5es de migra\u00e7\u00e3o seguros com backfill e \u00edndices<\/h2>\n\n<p>Em ambientes produtivos, trabalho com <strong>em duas fases<\/strong> Altera\u00e7\u00f5es. Passo 1: Adicionar a coluna \u00abinstant\u00bb, para come\u00e7ar <code>NULL<\/code>-compat\u00edvel e com um valor predefinido claro. Passo 2: Atualizar a aplica\u00e7\u00e3o atrav\u00e9s de um feature flag, de modo a que as novas grava\u00e7\u00f5es j\u00e1 preencham a coluna, enquanto os registos existentes permanecem em branco. O <strong>Aterro<\/strong> executo de forma ass\u00edncrona em pequenos lotes, por exemplo, atrav\u00e9s de um \u00abworker\u00bb que utiliza <code>UPDATE ... WHERE new_col IS NULL ORDER BY pk LIMIT N<\/code> repete o processo e insere pausas entre as execu\u00e7\u00f5es. Desta forma, a carga mant\u00e9m-se control\u00e1vel.<\/p>\n\n<p>Se precisar de um \u00edndice secund\u00e1rio na nova coluna, desassocio-o da adi\u00e7\u00e3o da coluna. A cria\u00e7\u00e3o do \u00edndice \u00e9, na maioria das vezes, <strong>INPLACE<\/strong>, mas demora um tempo proporcional \u00e0 quantidade de dados. Ao separar estes processos, evito que a altera\u00e7\u00e3o r\u00e1pida do esquema falhe devido a execu\u00e7\u00f5es demoradas dos \u00edndices. S\u00f3 quando o preenchimento estiver conclu\u00eddo \u00e9 que, opcionalmente, executo um <code>N\u00c3O NULO<\/code>-passo a passo \u2013 mas apenas se o algoritmo o permitir sem necessidade de reconstru\u00e7\u00e3o. No caso de revers\u00f5es, basta, muitas vezes, desativar o sinalizador de funcionalidade e deixar a coluna inativa at\u00e9 que seja planeada uma revers\u00e3o 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>Desempenho e replica\u00e7\u00e3o<\/h2>\n\n<p>As opera\u00e7\u00f5es instant\u00e2neas reduzem o esfor\u00e7o que as r\u00e9plicas t\u00eam de realizar, uma vez que n\u00e3o ocorrem processos de c\u00f3pia em grande escala. Isto diminui o risco de atrasos percet\u00edveis e alivia a carga dos processos em execu\u00e7\u00e3o paralela <strong>Consultas<\/strong>. Em ambientes com v\u00e1rios locais ou em cascata, isso desempenha um papel decisivo para os objetivos de RTO\/RPO. Quem tiver as solu\u00e7\u00f5es adequadas <a href=\"https:\/\/webhosting.de\/pt\/topologias-de-replicacao-de-bases-de-dados-configuracao-de-clusters-de-alojamento-escalabilidade-de-bases-de-dados\/\">Topologias de replica\u00e7\u00e3o<\/a> permite transmitir altera\u00e7\u00f5es de forma espec\u00edfica e estruturar os rollbacks de forma clara. Desta forma, o sistema mant\u00e9m-se est\u00e1vel mesmo em picos de tr\u00e1fego <strong>reativo<\/strong>.<\/p>\n\n<p>No entanto, tenho em conta os formatos do Binlog e os tamanhos dos eventos para evitar efeitos colaterais. Em caso de volume de grava\u00e7\u00f5es muito elevado, verifico o estado dos escravos e a lat\u00eancia do thread SQL durante a altera\u00e7\u00e3o. Quem precisar de auditoria pode destacar a altera\u00e7\u00e3o DDL na marca\u00e7\u00e3o do registo. As tarefas ETL a jusante devem ter conhecimento da nova coluna com anteced\u00eancia, para que as execu\u00e7\u00f5es noturnas n\u00e3o sejam em v\u00e3o. Esta orquestra\u00e7\u00e3o cria um sistema fi\u00e1vel <strong>Processos<\/strong>.<\/p>\n\n<h2>Caracter\u00edsticas espec\u00edficas do Galera\/Cluster no Instant-DDL<\/h2>\n\n<p>Em clusters com replica\u00e7\u00e3o s\u00edncrona (por exemplo, Galera), as opera\u00e7\u00f5es DDL funcionam frequentemente como <strong>TOI<\/strong>-Evento (Total Order Isolation). O INSTANT reduz significativamente a coordena\u00e7\u00e3o global necess\u00e1ria para tal, mas pode, ainda assim, ocorrer uma breve pausa a n\u00edvel do cluster. Por isso, continuo a planear conscientemente essas altera\u00e7\u00f5es, mantenho as sess\u00f5es curtas e evito transa\u00e7\u00f5es simult\u00e2neas de longa dura\u00e7\u00e3o que <strong>MDL<\/strong>- poderiam prolongar os per\u00edodos de bloqueio. S\u00f3 recorro \u00e0s estrat\u00e9gias de RSU (Rolling Schema Upgrade) de forma seletiva, quando \u00e9 tecnicamente imprescind\u00edvel \u2014 o sobrecarregamento operacional \u00e9, na maioria das vezes, superior aos benef\u00edcios.<\/p>\n\n<p>Particularmente importante: implementa\u00e7\u00e3o de esquemas e aplica\u00e7\u00f5es <strong>orquestrar<\/strong> Fa\u00e7o com que todos os n\u00f3s tenham uma vis\u00e3o consistente antes de se verificarem picos de carga. Prevenho as verifica\u00e7\u00f5es de integridade e as sondas de prontid\u00e3o atrav\u00e9s de pequenas janelas de manuten\u00e7\u00e3o e crit\u00e9rios de interrup\u00e7\u00e3o claros. Desta forma, a <strong>Disponibilidade<\/strong> elevado, apesar da serializa\u00e7\u00e3o global do 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>Planeamento em configura\u00e7\u00f5es de alojamento<\/h2>\n\n<p>Em configura\u00e7\u00f5es geridas ou em cluster, o Instant-DDL demonstra os seus pontos fortes, pois j\u00e1 n\u00e3o preciso de vincular as implementa\u00e7\u00f5es a longas janelas de manuten\u00e7\u00e3o. Especialmente com armazenamento em SSD e elevado paralelismo, reduzo os picos de I\/O e <strong>Cache<\/strong>. Coordeno as altera\u00e7\u00f5es com as implementa\u00e7\u00f5es da aplica\u00e7\u00e3o, para que os feature flags e o esquema sejam ativados numa sequ\u00eancia. A monitoriza\u00e7\u00e3o permanece ativa, mas as interven\u00e7\u00f5es tornam-se menos frequentes. O resultado s\u00e3o planos mais claros e menos tarefas operacionais <strong>Riscos<\/strong>.<\/p>\n\n<p>Tenho tamb\u00e9m em conta os hor\u00e1rios das c\u00f3pias de seguran\u00e7a e os trabalhos em lote em execu\u00e7\u00e3o, para que a altera\u00e7\u00e3o n\u00e3o ocorra durante a execu\u00e7\u00e3o de relat\u00f3rios de grande dimens\u00e3o. Em cen\u00e1rios multi-tenant, coordeno se determinadas bases de dados devem ser atualizadas primeiro e outras a seguir. Garanto a consist\u00eancia atrav\u00e9s da uniformidade nas configura\u00e7\u00f5es, como o ROW_FORMAT. Desta forma, evito surpresas caso sejam necess\u00e1rias colunas adicionais mais tarde. A planifica\u00e7\u00e3o poupa tempo de forma significativa neste contexto <strong>Despesas<\/strong>.<\/p>\n\n<h2>Exemplos pr\u00e1ticos retirados de projetos<\/h2>\n\n<p>Uma loja precisa, a curto prazo, de um campo de segmento de clientes para uma campanha; adiciono a coluna atrav\u00e9s do INSTANT e a equipa de marketing pode preench\u00ea-la imediatamente. Uma tabela de registo regista novos par\u00e2metros t\u00e9cnicos; adiciono a coluna durante o dia, enquanto centenas de opera\u00e7\u00f5es de grava\u00e7\u00e3o por segundo continuam a decorrer e a aplica\u00e7\u00e3o <strong>respostas<\/strong>. Num sistema de relat\u00f3rios, integro novos campos de KPI sem comprometer os fechos di\u00e1rios. Tamb\u00e9m \u00e9 poss\u00edvel implementar mais rapidamente os requisitos regulamentares quando os campos de auditoria s\u00e3o introduzidos sem necessidade de reconstru\u00e7\u00e3o. Estas pequenas medidas proporcionam resultados r\u00e1pidos <strong>Resultados<\/strong>.<\/p>\n\n<p>Em todos os casos, verifico posteriormente as estat\u00edsticas e analiso amostras espec\u00edficas. Verifico se os ORMs ou as ferramentas de migra\u00e7\u00e3o t\u00eam imediatamente em conta a coluna. As caches e os scripts de migra\u00e7\u00e3o t\u00eam de conhecer a nova estrutura, para que n\u00e3o surjam interpreta\u00e7\u00f5es erradas. No caso de equipas maiores, documento a altera\u00e7\u00e3o num manual de procedimentos. Desta forma, o hist\u00f3rico e os fundamentos da decis\u00e3o ficam bem documentados <strong>compreens\u00edvel<\/strong>.<\/p>\n\n<h2>Resolu\u00e7\u00e3o de problemas quando n\u00e3o \u00e9 instant\u00e2neo<\/h2>\n\n<p>Se uma altera\u00e7\u00e3o colidir com <code>ALGORITMO=INSTANT\u00c2NEO<\/code> , procuro primeiro formatos incompat\u00edveis, como <code>ROW_FORMAT=COMPRESSED<\/code> ou por \u00edndices especiais. Depois, verifico os detalhes da vers\u00e3o: na vers\u00e3o 10.3, a posi\u00e7\u00e3o da coluna obriga a <strong>Fim<\/strong>, a partir de 10.4, o processo ser\u00e1 mais flex\u00edvel. Se a base de dados apresentar um fallback para INPLACE ou COPY, interrompo o processo e ajusto a estrat\u00e9gia ou o esquema. S\u00e3o relevantes <code>MOSTRAR AVISOS<\/code> e <code>MOSTRAR CREATE TABLE<\/code> para indicadores de layout. S\u00f3 quando o caso de teste funcionar na hora \u00e9 que planeio a implementa\u00e7\u00e3o em produ\u00e7\u00e3o <strong>Execu\u00e7\u00e3o<\/strong>.<\/p>\n\n<p>Tamb\u00e9m penso em fases com elevado volume de transa\u00e7\u00f5es: mesmo bloqueios curtos de metadados podem causar perturba\u00e7\u00f5es em pontos cr\u00edticos, se as aplica\u00e7\u00f5es apresentarem padr\u00f5es desfavor\u00e1veis. Com um planeamento mais minucioso, optando por um intervalo de tempo mais calmo, consigo atenuar esses efeitos. Al\u00e9m disso, verifico se os gatilhos, as colunas virtuais ou as chaves estrangeiras t\u00eam efeitos colaterais. Verifica\u00e7\u00f5es minuciosas antecipadas poupam muito tempo em caso de incidente. O meu objetivo continua a ser que a altera\u00e7\u00e3o seja breve, revers\u00edvel e <strong>Transparente<\/strong> para segurar.<\/p>\n\n<h2>Monitoriza\u00e7\u00e3o e resolu\u00e7\u00e3o de problemas durante o funcionamento<\/h2>\n\n<p>Durante a implementa\u00e7\u00e3o, vou observar de forma espec\u00edfica <strong>MDL<\/strong>-Tempos de espera e E\/S. <code>INFORMATION_SCHEMA.PROCESSLIST<\/code> e <code>INFORMATION_SCHEMA.METADATA_LOCKS<\/code> mostram-me se h\u00e1 sess\u00f5es \u00e0 espera de DDL. Al\u00e9m disso, utilizo <strong>performance_schema<\/strong>-Eventos, para correlacionar pequenas pausas. Nos r\u00e9plicas, verifico a lat\u00eancia do thread SQL e o Seconds_Behind_Master, para poder limitar os backfills ou as implementa\u00e7\u00f5es de aplica\u00e7\u00f5es, se necess\u00e1rio. O binlog cresce apenas minimamente com a op\u00e7\u00e3o INSTANT; picos anormais indicam etapas subsequentes ocultas (por exemplo, cria\u00e7\u00e3o de \u00edndices).<\/p>\n\n<p>Ap\u00f3s a altera\u00e7\u00e3o, verifico se est\u00e1 correto com <code>EXPLICAR<\/code> e leituras de amostras, para garantir que as consultas detetem corretamente as novas colunas. Nos pain\u00e9is, observo <strong>Threads_running<\/strong>, contador de handlers e taxa de acertos do buffer pool, para detetar efeitos secund\u00e1rios. Se, apesar de <code>LOCK=NENHUM<\/code> Quando ocorrem bloqueios, na maioria das vezes deve-se a um ponto de pico concorrente de DDL ou DML. Nesse caso, basta uma breve janela de manuten\u00e7\u00e3o ou o reagendamento para um per\u00edodo mais calmo. Interrompo deliberadamente os erros, em vez de cair em mecanismos de fallback pouco claros \u2013 o que evita reconstru\u00e7\u00f5es demoradas.<\/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>Compara\u00e7\u00e3o dos algoritmos DDL<\/h2>\n\n<p>A tabela seguinte classifica os m\u00e9todos COPY, INPLACE e INSTANT e ajuda-me a avaliar de forma realista os riscos e a dura\u00e7\u00e3o. Al\u00e9m disso, avalio em que medida os acessos simult\u00e2neos s\u00e3o afetados e que tipos de bloqueios podem ocorrer. Para uma compreens\u00e3o mais aprofundada dos bloqueios, vale a pena consultar <a href=\"https:\/\/webhosting.de\/pt\/bloqueio-de-linhas-na-base-de-dados-otimizacao-da-concorrencia-no-mysql-desempenho-bloqueios\/\">Bloqueio de linhas<\/a> e o impacto na paralelidade. \u00c9 assim que evito decis\u00f5es erradas em situa\u00e7\u00f5es cr\u00edticas para a produ\u00e7\u00e3o <strong>Tabelas<\/strong>. A tabela foi deliberadamente simplificada e serve como uma forma r\u00e1pida de <strong>Compara\u00e7\u00e3o<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Algoritmo<\/th>\n      <th>Fechaduras<\/th>\n      <th>C\u00f3pia de dados<\/th>\n      <th>Dura\u00e7\u00e3o (tabelas grandes)<\/th>\n      <th>Utiliza\u00e7\u00e3o t\u00edpica<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>COPY<\/td>\n      <td>mais forte <strong>Fechaduras<\/strong><\/td>\n      <td>completo<\/td>\n      <td>longo (at\u00e9 horas)<\/td>\n      <td>altera\u00e7\u00f5es incompat\u00edveis, mudan\u00e7a de formato<\/td>\n    <\/tr>\n    <tr>\n      <td>INPLACE<\/td>\n      <td>moderado <strong>Fechaduras<\/strong><\/td>\n      <td>parcial\/com grande quantidade de metadados<\/td>\n      <td>m\u00e9dio (de alguns minutos a mais tempo)<\/td>\n      <td>muitas altera\u00e7\u00f5es online sem uma reconstru\u00e7\u00e3o total<\/td>\n    <\/tr>\n    <tr>\n      <td>INSTANT\u00c2NEO<\/td>\n      <td>breve <strong>MDL<\/strong>-fases<\/td>\n      <td>n\u00e3o (apenas metadados)<\/td>\n      <td>muito curto (mil\u00e9simos a segundos)<\/td>\n      <td>ADD\/DROP COLUMN, altera\u00e7\u00e3o de posi\u00e7\u00e3o (a partir da vers\u00e3o 10.4)<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Interpreto a tabela como uma \u00e1rvore de decis\u00e3o: se o INSTANT for poss\u00edvel, aplico-o; caso contr\u00e1rio, avalio o INPLACE; s\u00f3 se ambos falharem \u00e9 que aceito o COPY. A combina\u00e7\u00e3o entre a estrat\u00e9gia de LOCK e o algoritmo tem de se adequar ao padr\u00e3o de tr\u00e1fego. Especialmente no caso de aplica\u00e7\u00f5es com grande volume de grava\u00e7\u00f5es, garanto antecipadamente uma alternativa. Assim, as implementa\u00e7\u00f5es mant\u00eam-se est\u00e1veis mesmo sob press\u00e3o <strong>control\u00e1vel<\/strong>. Se for aplicado de forma consistente, poupo bastante <strong>Tempo<\/strong>.<\/p>\n\n<h2>Compatibilidade de aplica\u00e7\u00f5es e ORMs<\/h2>\n\n<p>As altera\u00e7\u00f5es no esquema s\u00f3 s\u00e3o \u201einvis\u00edveis\u201c se o c\u00f3digo da aplica\u00e7\u00e3o as suportar. <strong>SELECT *<\/strong> e os acessos por posi\u00e7\u00e3o ordinal constituem fatores de risco assim que reorganizo as colunas (a partir da vers\u00e3o 10.4) ou insiro novos campos. Por isso, prefiro listas de colunas expl\u00edcitas, mapeamentos verificados e o controlo de vers\u00f5es dos DTOs. Os ORMs e os executores de migra\u00e7\u00e3o armazenam frequentemente metadados em cache; um rein\u00edcio a quente ou um \u201eReprepare\u201c para instru\u00e7\u00f5es preparadas evita interpreta\u00e7\u00f5es erradas. Em ambientes de microsservi\u00e7os, coordeno as vers\u00f5es de forma a que apenas as vers\u00f5es tolerantes estejam ativas simultaneamente.<\/p>\n\n<p>No que diz respeito \u00e0 compatibilidade com vers\u00f5es anteriores, segue-se o seguinte princ\u00edpio: primeiro, adicionar a coluna; depois, implementar o c\u00f3digo que a utiliza de forma opcional; s\u00f3 quando todas as inst\u00e2ncias estiverem atualizadas e o preenchimento retroativo estiver conclu\u00eddo \u00e9 que refor\u00e7o as restri\u00e7\u00f5es. Desta forma, as atualiza\u00e7\u00f5es para vers\u00f5es anteriores e futuras s\u00e3o r\u00e1pidas e o sistema mant\u00e9m-se robusto. Para as auditorias, documento a justifica\u00e7\u00e3o, a instru\u00e7\u00e3o SQL, a data e hora, os crit\u00e9rios de sucesso e o procedimento de revers\u00e3o \u2014 isto gera confian\u00e7a e garante a repetibilidade <strong>Processos<\/strong>.<\/p>\n\n<h2>Escalabilidade: particionamento e DDL instant\u00e2neo<\/h2>\n\n<p>O particionamento e o INSTANT complementam-se na perfei\u00e7\u00e3o, porque unidades f\u00edsicas mais pequenas tornam as atualiza\u00e7\u00f5es ainda mais previs\u00edveis. Ao dividir as tabelas de forma l\u00f3gica, limito os pontos de congestionamento e facilito altera\u00e7\u00f5es posteriores. Boas <a href=\"https:\/\/webhosting.de\/pt\/estrategias-de-particao-de-bases-de-dados-que-alojam-bases-de-dados-escalaveis\/\">Estrat\u00e9gias de particionamento<\/a> ajudam a manter conjuntos de dados muito grandes sob controlo a longo prazo. Em suma, consigo lat\u00eancias mais baixas, janelas de manuten\u00e7\u00e3o mais claras e menos riscos em <strong>Altera\u00e7\u00f5es<\/strong>. A nova coluna ficar\u00e1 ent\u00e3o dispon\u00edvel mais rapidamente em todas as parti\u00e7\u00f5es relevantes.<\/p>\n\n<p>Planeio a sequ\u00eancia: primeiro, o esbo\u00e7o do particionamento; depois, os DDLs; e, por fim, os preenchimentos para valores opcionais. \u00c9 assim que elimino os conflitos que poderiam surgir em caso de ajustes simult\u00e2neos nos \u00edndices ou no armazenamento. Tamb\u00e9m aqui os testes continuam a ser a minha ferramenta mais poderosa. Com m\u00e9tricas claras, consigo determinar se a etapa \u00e9 vi\u00e1vel nos sistemas de produ\u00e7\u00e3o. Esta abordagem disciplinada evita problemas e mant\u00e9m a equipa <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>Recupera\u00e7\u00e3o ap\u00f3s falhas, c\u00f3pias de seguran\u00e7a e consist\u00eancia<\/h2>\n\n<p>O INSTANT-DDL altera apenas <strong>Cat\u00e1logo e metadados<\/strong>. Isso torna a opera\u00e7\u00e3o r\u00e1pida \u2013 e at\u00f3mica. Ap\u00f3s uma falha, a coluna ou fica vis\u00edvel ou n\u00e3o fica de todo; n\u00e3o surge um \u201eestado interm\u00e9dio\u201c. A carga do registo de redo\/undo permanece m\u00ednima, uma vez que n\u00e3o s\u00e3o movidas p\u00e1ginas de dados. No que diz respeito \u00e0 replica\u00e7\u00e3o: o evento DDL \u00e9 transmitido de forma limpa; as r\u00e9plicas n\u00e3o precisam de copiar linhas. As c\u00f3pias de seguran\u00e7a f\u00edsicas que estejam a decorrer durante a altera\u00e7\u00e3o devem registar a breve altera\u00e7\u00e3o dos metadados no momento do instant\u00e2neo \u2013 as ferramentas com checkpoints consistentes conseguem lidar com isso. Os backups l\u00f3gicos incluem a coluna imediatamente no <code>CREATE TABLE<\/code>-instru\u00e7\u00f5es, mesmo que muitas linhas ainda tenham o <strong>Predefini\u00e7\u00e3o<\/strong> carregar.<\/p>\n\n<p>\u00c9 poss\u00edvel efetuar v\u00e1rias altera\u00e7\u00f5es instant\u00e2neas consecutivas. No entanto, procuro n\u00e3o mudar de posi\u00e7\u00e3o nem eliminar e voltar a criar colunas com demasiada frequ\u00eancia. Altera\u00e7\u00f5es frequentes na estrutura aumentam o esfor\u00e7o de coordena\u00e7\u00e3o e, em casos extremos, podem levar a que, a dada altura, fa\u00e7a sentido uma reconstru\u00e7\u00e3o completa (por exemplo, quando s\u00e3o necess\u00e1rias altera\u00e7\u00f5es de formato). Com uma janela de altera\u00e7\u00f5es pragm\u00e1tica e um roteiro bem definido, consigo manter a d\u00edvida t\u00e9cnica sob controlo.<\/p>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>Com o Instant ADD COLUMN, consigo efetuar altera\u00e7\u00f5es no esquema de tabelas de grande dimens\u00e3o em tempo real, alterando apenas os metadados e deixando os blocos de dados inalterados. A vers\u00e3o correta, um ROW_FORMAT compat\u00edvel e op\u00e7\u00f5es DDL claras, tais como <code>ALGORITMO=INSTANT\u00c2NEO<\/code> e <code>LOCK=NENHUM<\/code> determinam o sucesso ou a reconstru\u00e7\u00e3o. Para a opera\u00e7\u00e3o e a replica\u00e7\u00e3o, isso significa menos atrasos, implementa\u00e7\u00f5es program\u00e1veis e elevada <strong>Disponibilidade<\/strong>. Recorro a testes, monitoriza\u00e7\u00e3o e documenta\u00e7\u00e3o clara para evitar surpresas. Desta forma, a minha base de dados mant\u00e9m-se flex\u00edvel e consigo implementar novos requisitos sem interrup\u00e7\u00f5es no <strong>Funcionamento em direto<\/strong> de.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra como o MariaDB Instant ADD COLUMN, gra\u00e7as ao algoritmo INSTANT, permite altera\u00e7\u00f5es no esquema sem tempo de inatividade e revoluciona o DDL online do MariaDB na administra\u00e7\u00e3o de bases de dados.<\/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\/pt\/wp-json\/wp\/v2\/posts\/21231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=21231"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21231\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/21224"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=21231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=21231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=21231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}