Existe alguma maneira de acelerar a reativação de restrições?
Como parte de um trabalho de atualização de várias tabelas em nosso Warehouse, que está sendo feito fora do expediente, a reativação de restrições nessas tabelas pode levar mais de uma hora. O resto do trabalho, as atualizações, levam cerca de 5 minutos. Desabilitar as mesmas restrições antes do início das atualizações é subsegundo.
EDITAR
O trabalho em questão é atualizar os PKs e FKs em linhas de dados antes de uma determinada data para evitar que esses registros apareçam nos relatórios. Uma maneira de soft delete
registros `se você gosta.
A maioria dos tamanhos de linha da tabela são > 130 m de linhas cada, exceto uma que tem mais de 370 m de linhas. Os outros dois são menores.
TableName rows
Table_1 371255778
Table_2 131703902
Table_3 131665535
Table_4 131665535
Table_5 131665535
Table_6 131665535
Table_7 19364988
Table_8 1458800
Estou usando o seguinte comando para desabilitar as restrições em cada tabela
ALTER TABLE database.dbo.table_name NOCHECK CONSTRAINT ALL;
E o seguinte para reativá-los novamente
ALTER TABLE database.dbo.table_name WITH CHECK CHECK CONSTRAINT ALL;
não há relatórios ou outros trabalhos em execução ao mesmo tempo.
Está demorando tanto para reativar o comportamento esperado das restrições ou há algo que pode ser feito para acelerá-lo?
desde já, obrigado
Como esperado.
Por exemplo, restrições CHECK: cada linha deve ser verificada para cada restrição de verificação.
Se você tiver 3 restrições CHECK e 370 milhões de linhas, são 1,11 bilhão de verificações a serem feitas em um único ALTER.
Cada restrição UNIQUE deve verificar todas as 370 milhões de linhas, no mesmo ALTER.
É por isso que normalmente não desabilito restrições em meus DWs.
Isso leva muito tempo. Especialmente quando você chega a bilhões de linhas.