Eu tenho uma tabela muito grande com 500 mil linhas e uma coluna de texto que vou descartar. No meu ambiente Dev, eu eliminei a coluna e comecei o processo de recuperação, mas não tenho certeza do tamanho do lote na instrução “DBCC CLEANTABLE (MyDb,'dbo.LargeTbl, 100000)” realmente faz.
Eu tentei configurá-lo para 5, esperando que ele verifique as primeiras 5 linhas e termine. “DBCC CLEANTABLE (MyDb,'dbo.LargeTbl, 5)” e demorou 28 horas. Então eu restaurei o db, configurei para 100.000 e demorou 4 horas
Pergunta real: O tamanho do lote informa ao dbcc cleantable quantas linhas fazer por vez e continua executando continuamente 100K por vez até passar por todas as 500mil linhas? Ou uma vez que eu executo os 100.000, tenho que executá-lo novamente até fazer todas as 500 mil linhas?
No meu segundo teste (executando os 100K uma vez), consegui recuperar 30 GB. Em seguida, executei uma reorganização de índice em TODOS os índices e recuperei 60 GB adicionais.
Além da ótima resposta por armitage você provavelmente não precisa usar DBCC CLEANTABLE no seu cenário.
Você declara
As melhores práticas nos documentos da Microsoft dizem:
Parece que tempo e espaço são seus maiores objetivos. Geralmente, reconstruir um índice é mais rápido ( mas mais intensivo em recursos ) do que uma reorganização.
Como você está trabalhando em um servidor de desenvolvimento .
Apenas reconstrua seus índices e você obterá os benefícios da reorganização do índice e do DBCC CLEANTABLE ao mesmo tempo, e provavelmente muito mais rápido.
Nota Reconstruir e Reorganizar não são a mesma coisa:
De acordo com a documentação da Microsoft, o tamanho do lote informa ao DBCC CleanTable o número de linhas a serem processadas por transação. Isso está relacionado ao número de linhas que o DBCC CleanTable processa internamente à medida que o processo do DBCC CleanTable é executado.
Ao pegar o exemplo na documentação e modificar para adicionar um milhão de linhas e, em seguida, executar o script de exemplo várias vezes com valores variados para o tamanho do lote (veja abaixo), parece que especificar um tamanho de lote pequeno aumenta o tempo de execução, pois o DBCC CleanTable está apenas operando no número de linhas especificado no tamanho do lote.