Eu tinha uma tabela com mais de 70 milhões de registros em um banco de dados SQL Server, descartei essa tabela (coisa única) para liberar espaço no disco, mas parece que o tamanho não mudou muito. Eu vejo que eu poderia reduzir o db ao mínimo.
Essa é a maneira de fazer isso?
A última vez que fiz uma redução usando o SQL Server Management Studio, levou algumas horas para ser concluída. Existe uma maneira mais rápida?
A eliminação de uma tabela liberará espaço no banco de dados, mas não liberará o espaço de volta para o Windows. Isso requer a redução do arquivo de banco de dados. No entanto, não queremos o arquivo de banco de dados cheio. Queremos muito espaço livre para que, à medida que carregamos mais dados, não tenhamos que aumentar o arquivo de dados com frequência. Isso causa a fragmentação do arquivo de dados nos discos físicos.
Quanto a tornar o encolhimento mais rápido, não, não há como torná-lo mais rápido. A redução do banco de dados requer a leitura e regravação da maioria dos dados no banco de dados para que todo o espaço em branco possa ser liberado do arquivo de banco de dados de volta para o sistema operacional. Todo esse IO leva tempo e causa muitos problemas de fragmentação.
Você vai querer ler sobre DBCC SHRINKFILE com muito cuidado.
http://technet.microsoft.com/en-us/library/ms189493.aspx
Em geral, você não deseja reduzir seu banco de dados para o menor tamanho possível em disco. Você deseja deixar o SQL Server com bastante espaço para que ele não precise crescer muito automaticamente. A resposta aqui tem muitas informações úteis:
https://stackoverflow.com/questions/4522719/to-dbcc-shrinkdatabase-or-not-to-dbcc-shrinkdatabase-thats-the-question
O encolhimento é um procedimento bastante caro e pode levar horas. Para usar o espaço com mais eficiência, você pode transferir tabelas para um novo grupo de arquivos com índices clusterizados pré-criados e descartar os anteriores. Eu pessoalmente prefiro isso porque é mais fácil fazer esse "encolhimento" em várias etapas e mais previsível - portanto, mais fácil de planejar. Quando você inicia o DBCC SHRINK, você não sabe quanto tempo levará.
Atualização (graças a mrdennny por apontar isso): esta é uma abordagem muito específica e só pode ser usada se você tiver um banco de dados somente leitura (como data warehouse) porque ao copiar dados para outra tabela, nenhuma gravação é permitida nesta tabela para o questão de consistência. Para economizar tempo e obter desempenho máximo, você pode alternar o banco de dados para o modelo de recuperação SIMPLE e usar a dica TABLOCK - isso permitirá que o sistema use log mínimo e faça muito menos gravações no log de transações.
Confira este artigo: http://itknowledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/
"A solução que encontramos foi realmente muito simples. Faça a exclusão do banco de dados normalmente. Em seguida, faça backup e restaure o banco de dados. Em seguida, faça a redução, seguida pela reconstrução dos índices clusterizados para corrigir o problema de fragmentação que a redução introduzirá ."