Temos 2 ambientes de banco de dados exatamente iguais. O segundo ambiente contém uma cópia do banco de dados de produção e hospeda aproximadamente 11 milhões de registros na tabela Invoice. O objetivo desse ambiente é usado para ver quanto tempo as consultas de atualização específicas levarão para saber se haverá algum tempo de inatividade (já que as tabelas são bloqueadas durante a alteração do esquema)
ao executar a instrução add no segundo ambiente
alter table Invoice add IsVerified bit not null default(0)
A consulta é encerrada imediatamente, o que é estranho, pois há 11 milhões de registros nela. Eu esperaria pelo menos um pequeno atraso. Mesmo uma contagem selecionada(*) demora mais. No banco de dados de produção principal, no entanto, leva muito mais tempo, mais de 30 segundos, então temos que planejar essa consulta em uma janela de manutenção especial. Enquanto a consulta estava sendo executada não havia nada bloqueando o SPID (verificado usando sp_who2)
Qual poderia ser a razão, que a segunda cópia do banco de dados aparentemente não tem nenhum esforço para adicionar uma coluna em um banco de dados de 11 milhões de registros enquanto o outro maindb não pode terminar a tempo (<30 segundos). adicionar uma coluna de valor padrão sem a necessidade de ser gravada em todos os registros? Pode ser porque nosso ambiente de teste é a edição Developer, enquanto o ambiente de produção é a edição Standard? Talvez alguns recursos especiais na edição Developer que não estejam ativos no SQLStandard?
select count(*) from Invoice //result: 11701200
SQL Server Execution Times:
CPU time = 2375 ms, elapsed time = 608 ms.
Script para adicionar:
alter table Invoice add IsVerified bit not null default(0)
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 12 ms.
Adicionando colunas NOT NULL como uma operação online
A alteração de esquema online ainda é um recurso Enterprise do SQL Server 2019 (15.x), portanto, você executa uma operação online em sua edição Developer, enquanto na edição Standard você faz isso offline.