Ultimamente, em vez de apenas aumentar os arquivos quando eles se aproximam de 80% de utilização de arquivos, tenho sido mais proativo em recuperar espaço por meio de truques comuns, como desfragmentar heaps, adicionar e descartar índices clusterizados, implementar compactação de linha ou página, etc.
No entanto, há alguns casos em que consegui recuperar ainda mais espaço executando DBCC CLEANTABLE . Com centenas de bancos de dados em meu ambiente, não é possível saber o que os usuários fazem em cada um e é totalmente aceitável que haja mudanças envolvendo a eliminação de colunas de tamanho fixo. Normalmente, encontrei essas oportunidades observando contagens de linhas versus contagens de páginas em alguns scripts de utilização de espaço de objeto que escrevi. Eu gostaria de dar um passo adiante tentando automatizar a detecção desses tipos de cenários.
O que eu gostaria de saber é se alguém está monitorando ativamente esse tipo de oportunidade e, em caso afirmativo, o que você procura especificamente?
Minha ideia era escrever algo como reunir o tamanho máximo e mínimo de uma linha, o número de linhas na tabela, o número de páginas alocadas e o número de páginas usadas e, em seguida, fazer algumas contas básicas para registrar os resultados que estão bem fora do que seria "esperado".
A solução que eu pensaria para esse problema é executar semanalmente um trabalho que executará sp_spaceused para todas as tabelas em um banco de dados e salvar esses dados em uma tabela. Se houver diferenças de tamanho para cada tabela maior que... digamos... 10%, eu executaria o dbcc cleantable.
Meu código para percorrer os tamanhos da tabela é assim:
Agora é só montar a lógica que vai verificar qual seria a mudança de tamanho ao longo da semana e agendá-la.