Temos um enorme banco de dados de produção, seu tamanho é de cerca de 300 GB. Existe alguma abordagem para melhorar o desempenho de uma consulta de exclusão? No momento, a velocidade de exclusão está entre 1 e 10k por minuto, é muito lenta para nós.
sql-server
query-performance
Comunidade
fonte
fonte
Respostas:
Se você estiver tentando excluir um grande número de linhas em uma única instrução, é provável que esteja aguardando a atividade de log. Então você pode:
TRUNCATE
ouDROP
/CREATE
.SELECT INTO
para colocar os dados que deseja manter em outra tabela e, em seguidaTRUNCATE
, mova a pequena parte para trás. (Ou simplesmente solte a tabela antiga, renomeie a nova e aplique restrições / permissões etc.)CHECKPOINT
limpar o log em vez de fazer backups de log, mas precisará restaurá -lo e fazer um novo backup completo para reiniciar a cadeia de logs .fonte
Há alguma dica, mas qual versão você está usando? É edição empresarial? De qualquer forma:
Adicione detalhes, quando você trabalha com um grande banco de dados, não há uma única resposta válida.
fonte
Você deve tentar excluí-los pedaço por pedaço, provavelmente excluindo em loop, cada iteração de exclusão é sua própria transação e, em seguida, limpando o log no final de cada iteração de loop.
Além disso, você precisaria encontrar o número que usará como valor no chunk para excluir os registros. Exige um teste completo, seria melhor se você pudesse testar primeiro o valor da parte no UAT.
Para saber como proceder, remeta para Quebrar grandes operações de exclusão em pedaços
fonte
A exclusão pode ser lenta se a tabela grande tiver chave estrangeira recursiva.
nesse caso, encontre tempo oportuno, desative os serviços dependentes, desabilite a chave estrangeira recursiva, execute uma exclusão massiva e restaure a chave estrangeira novamente.
fonte
Adicionando mais alguns pontos ...
tablock
opção.Para obter mais ajuda, poste a consulta que você está usando, as informações da tabela mais as informações de bloqueio.
fonte