Esta pergunta é feita de várias formas aqui, mas a questão se resume a:
Eu sei que diminuir um banco de dados é arriscado. Nesse caso, removi muitos dados e nunca os utilizarei novamente.
- Como posso reduzir meu banco de dados? Quais arquivos eu encolho?
- Quais devem ser minhas considerações ao fazer isso?
- Devo fazer alguma coisa depois?
- E se for um banco de dados grande? Posso encolhê-lo em incrementos menores?
sql-server
shrink
Mike Walsh
fonte
fonte
Respostas:
Algumas advertências iniciais:
Se você leu sobre as preocupações e os riscos e ainda precisa diminuir, porque liberou uma quantidade significativa de espaço, espero que o restante desta resposta o ajude. Mas considere os riscos.
Existem duas abordagens principais que duas consideram aqui:
1.) Encolher Sim, faça o encolhimento real - considere usar em
DBCC SHRINKFILE
vez deDBCC SHRINKDATABASE
, você tem mais controle sobre o que encolhe e como. Isso vai causar alguma degradação do desempenho com certeza - é uma grande operação fazendo um monte de IO. Você pode potencialmente fugir com psiquiatras repetidas para um tamanho alvo que se torna progressivamente menor.Este é o exemplo "A.)" no
DBCC SHRINKFILE
link acima . Um arquivo de dados está sendo reduzido para o tamanho de destino de 7 MB neste exemplo. Esse formato é uma boa maneira de encolher repetidamente, conforme sua janela de tempo de inatividade permite. Eu faria isso nos testes de desenvolvimento para ver como o desempenho parece e quão baixo / alto você pode obter um incremento e determinar o tempo esperado na produção. Essa é uma operação on - line - você pode executá-la com usuários no sistema que acessam o banco de dados que estão sendo reduzidos, mas haverá degradação no desempenho, quase garantida. Portanto, monitore e observe e veja o que você está fazendo no servidor, escolha uma janela de tempo de inatividade ou um período de atividade mais leve, idealmente.Lembre-se sempre: - toda vez que você encolhe, fragmenta seus índices e deve reconstruir o índice se quiser encolher pedaços durante um período prolongado de tempo. Agora você está pagando um custo cada vez que não consegue fazer tudo em uma janela.
2.) Novo banco de dados - você pode criar um novo banco de dados e migrar dados para ele. Você teria que criar um script para o banco de dados vazio e todas as suas chaves, índices, objetos, procs, funções etc. e depois migrar dados para ele. Você pode escrever scripts para isso ou usar uma ferramenta como o SQL Data Compare do Red Gate ou outros fornecedores com ferramentas semelhantes. Isso é mais trabalho de configuração do seu lado, mais desenvolvimento e teste e, dependendo do seu ambiente, também pode explodir sua janela de tempo de inatividade, mas é uma opção a considerar.
Quando sou forçado a encolher um banco de dados Se esse fosse o meu ambiente, procuraria deixar uma quantidade razoável de espaço em branco no arquivo de dados porque gosto de ser um porco e gostaria de estar preparado para um crescimento futuro / inesperado. Então, eu ficaria bem em devolver o espaço se apenas deletássemos a maior parte do espaço, mas eu nunca confiaria naqueles que dizem "mas isso nunca voltará a crescer" e ainda deixará algum espaço em branco. A rota que eu provavelmente seguiria ( suspiro) é a abordagem de redução, se eu tivesse janelas menores de inatividade e não quisesse incorrer na complexidade de criar um banco de dados vazio e migrar dados para ele. Então, eu o reduzia um monte de vezes de forma incremental (com base em quantas vezes eu pensei que precisava basear nos meus testes no dev e no tamanho desejado. Escolhendo progressivamente um tamanho de arquivo menor) e depois reconstruí os índices. E então eu ' nunca disse a ninguém que encolhi meu banco de dados ;-)
fonte
DBCC SHRINKFILE
comando mencionado. Depende do servidor quantos arquivos seu banco de dados consiste. Um banco de dados simples possui um arquivo de banco de dados e um arquivo de log de transações.Todos sabemos que não é aconselhável fazer SHRINK regularmente de qualquer maneira. Tento deixar de fora todos os avisos e isenções de responsabilidade que você provavelmente conhece. Faça backup e não faça isso em casa, se possível :)
Bônus: no ambiente de replicação, se você fizer isso no banco de dados do editor, isso não fará com que os bancos de dados do assinante encolhem (o que pode ter um problema de tamanho, porque são edições Express).
Por fim, meu script reindex:
A única variável nisso é a 14, que pode ser obtida emitindo select
DB_ID('YourDBName')
, e o script assume que você está interessado apenas nas tabelas no esquema dba. *.fonte
Você ouviu todos os avisos sobre a redução de bancos de dados e todos são verdadeiros. Ele fragmentará seus índices e, em geral, atrapalha seu banco de dados e não deve ser feito em um sistema de produção.
Porém, geralmente faço isso semanalmente quando restauro um backup na minha estação de trabalho devido ao espaço na minha unidade SSD. Veja bem, eu não escrevi esse script, mas o encontrei anos atrás. Em outros bancos de dados [250 GB], criei um pacote SSIS que transferirá as tabelas necessárias e, em seguida, recriará os índices para uma sensação de índice tão recente.
fonte
Esta citação abaixo é diretamente da Microsoft (aplica-se às versões 2008-2016) e fornece orientações sobre se / quando e como você deve usar o
DBCC SHRINKFILE
comando.https://msdn.microsoft.com/en-us/library/ms189493.aspx
fonte