Estou executando um trabalho que exclui dados de 7 tabelas, 2 das quais contêm de 10 a 20 lakhs de registros. Mas o trabalho fica preso em um ponto ao excluir dados de uma tabela específica web_activity que contém apenas 42.000 registros. Na maioria das vezes, leva 4 horas. Mas às vezes leva apenas 7 minutos. Se esta for a questão do índice, então o que acontece no dia da execução de 7 minutos.
Existem 4 outros trabalhos que são executados paralelamente todos os dias e às vezes criam bloqueios, mas o bloqueio se deve à utilização de recursos por outros trabalhos.
O que me preocupa é: como posso reduzir as quatro horas para exclusão de apenas 42.000 registros da tabela web_activity?
Mais um ponto: há um grande número de leituras lógicas 2066225339. Não tenho certeza se essa é a causa ou não.
Ao fazer DBCC SHOWCONFIG para essas tabelas, ele mostra os dados abaixo:
Estou usando uma abordagem alternativa:
select Web_Activity_id into #Temp_web_activity from Web_Activity
where MONTH_NUMBER >=@min_month_to_delete
and year >= @year_to_delete;
DELETE FROM Web_Activity WHERE Web_Activity_id
in (select Web_Activity_id from #Temp_web_activity);
Será útil? Também tentei excluir em lotes na plataforma inferior, mas não ajudou muito.
Parece que você deseja excluir todos os registros da tabela. Se for esse o caso, eu usaria TRUNC em vez de DELETE, pois simplesmente remove todos os registros da tabela. DELETE é mais usado quando você precisa ir atrás de registros específicos. Você também pode ativar o SQL Profiler para ver exatamente o que está acontecendo nos casos de 7 minutos e de 4 horas para ajudar a restringir quaisquer problemas que possam estar afetando outras áreas também.