Como descartar tabelas grandes com o menor impacto no envio de logs?
Ter duas tabelas semi-grandes relacionadas (284.6876.609 linhas - 156.785.176 KB e 4.2628.162 linhas - 2.212.464 KB) em um banco de dados enviado com log que precisa ser eliminado ou eliminado. Como posso descartar essas duas tabelas e, ao mesmo tempo, minimizar o impacto no envio de log?
Respostas
Se você DROP
usar as tabelas, isso causará a geração de logs mínimos, porque não força imediatamente a coleta de lixo no espaço usado, apenas remove basicamente a referência. Da mesma forma, você pode obter o mesmo resultado com TRUNCATE
(embora eu ache que em tabelas grandes poderia haver mais sobrecarga DROP
, terei que pesquisar isso e atualizar minha resposta de acordo).
Este é um artigo muito bom que os detalhes por que TRUNCATE
e DROP
operações são seemlessly rápida e gerar logs mínimos, que é devido a um recurso do SQL Server chamado diferido queda .
De qualquer maneira, evite o DELETE
contrário que irá gerar uma tonelada de logs que precisarão ser enviados e reaplicados no banco de dados de destino.
Esta pergunta StackOverflow tem várias respostas com boas informações sobre como remover dados de uma grande tabela com eficiência (algumas podem não estar especificamente relacionadas à sua pergunta, mas boas para referência futura ou outros usuários com problemas semelhantes).