Considere criar uma nova tabela com o mesmo esquema mais a coluna rowversion e adicione uma visualização no topo das duas tabelas que faz a união de todas. Peça às pessoas que usem a visualização e escrevam, em vez de gatilhos, nas tabelas e visualizações subjacentes.
As inserções devem ser enviadas para a nova tabela, as atualizações devem mover os dados para a nova tabela e as exclusões devem ser aplicadas a ambas as tabelas.
Em seguida, faça movimentos em lote em segundo plano, movendo o maior número possível de registros por vez para a nova tabela. Você ainda pode ter problemas de simultaneidade enquanto isso ocorre e alguns planos de execução impressionantes, mas permite que você fique on-line enquanto as mudanças estão acontecendo.
Idealmente, você inicia o processo na sexta-feira à tarde para minimizar o efeito nos usuários finais e tenta fazê-lo antes da segunda-feira de manhã. Uma vez instalado, você pode alterar a exibição para apontar apenas para a nova tabela, e os planos de execução mais importantes desaparecem. Idealmente.
Para evitar que os gatilhos sejam disparados quando os dados estão sendo migrados em lotes, observe o número de linhas nas tabelas excluídas / inseridas no gatilho e pule as atividades se elas estiverem próximas ao número de linhas no seu lote.
No final, Michael decidiu pular a exibição (e não excluir da tabela original) para obter planos mais estáveis. A troca estava segurando essencialmente duas cópias da mesa. Ele transformou em uma série de postagens no blog .