Temos uma instância do SQL Server usada para arquivamento de email (cortesia de um pacote de arquivamento de terceiros). De vez em quando, o software é transferido para um novo banco de dados vazio. Fizemos isso trimestralmente no passado, mas pretendemos fazer isso mensalmente agora. A quantidade de dados arquivados é de cerca de 15 a 20 GB por mês, e a maior parte dos dados reside em apenas algumas tabelas (geralmente 2 a 4).
Depois que passamos para um novo banco de dados, o antigo passa a ser usado estritamente somente leitura. O que eu gostaria de fazer é otimizá-lo em um arquivo de dados compacto e agradável, com todas as tabelas / índices contíguos e com um fator de preenchimento muito alto e pouco espaço vazio no final do arquivo de dados. Além disso, estamos usando o Standard Edition neste servidor, com todas as limitações que isso implica (caso contrário, eu já estaria usando a compactação de dados).
Algumas possibilidades que posso pensar:
- Índices REBUILD / REORGANIZE, DBCC SHRINKFILE (Ok, essa não é uma opção sensata, pois o DBCC SHRINKFILE fragmentará a irritação de qualquer coisa que tocar, mas estou incluindo a integridade).
- Crie um novo banco de dados com as estatísticas automáticas desativadas. Script e recrie todas as tabelas do banco de dados de origem. Use bcp para exportar / importar os dados para o novo banco de dados, em ordem de chave de cluster. Script e recrie todos os índices. Recalcule todas as estatísticas com varredura completa.
- Crie um novo banco de dados com as estatísticas automáticas desativadas. Script e recrie todas as tabelas do banco de dados de origem. Use SSIS ou T-SQL para transferir dados para o novo banco de dados. Script e recrie todos os índices. Recalcule todas as estatísticas com varredura completa.
A etapa final em todos os casos seria definir o banco de dados no modo somente leitura.
Que outras opções boas / melhores existem para fazer isso? Minha preocupação é transferir os dados de maneira a preservar um alto fator de preenchimento e de uma maneira logicamente contígua.
Editar:
Devo mencionar que cerca de 75% dos dados parecem armazenados em colunas de imagem (LOB).
PRIMARY
?Respostas:
Para eliminar a fragmentação física nos arquivos, você também pode mover o índice em cluster com a exclusão existente para um novo grupo de arquivos. Como eles serão o RO, tornem todos o fator de preenchimento 100%, sem espaço necessário para inserções, divisões de páginas causadas por atualizações.
Isso também permitiria executar uma restauração fragmentada e colocar o banco de dados on-line muito rapidamente, caso você decidisse ir para o Enterprise. A empresa também permite índices columnstore, além de reduzir bastante o tempo de consulta desses dados somente leitura, que é um filete maciço.
Você pode usar a opção shrinkfile uma vez antes de mudar para somente leitura sem problemas sérios com a fragmentação para remover o espaço no final do arquivo conforme desejado.
Em uma nota lateral, basta verificar se você está usando os Tipos de Dados mais recentes para seus LOBS. ou seja, nvarchar (max) ou varchar (max) em vez de ntext ou texto, varbinary (max) em vez de imagem?
fonte
Eu enfrentei um problema semelhante com uma ferramenta de terceiros que também usava um tipo de dados de imagem para armazenar dados não estruturados e resolvi-o convertendo a coluna para usar o fluxo de arquivos . Você precisará fazer alguns testes para garantir que o aplicativo ainda funcione conforme o esperado, mas isso permitirá que você escreva seu próprio processo de arquivamento que move seus dados para um banco de dados de maneira eficiente.
fonte