Usuário com melhor resposta
Shrinkdatabase

Pergunta
-
Pessoal sei que parece um tanto quanto estranho, mas não consegui desvendar esse mistério.
Tenho algumas bases que precisam ser "shrincadas" quase diaramente devido a um erro de programação, então criei um plano de manutenção para efetuar os shrinks todos os dias, ele executa com sucesso sem nenhum log de erro porém a base não diminui o tamanho, e mais estranho, quando faço o processo manualmente clicando com o botão direito em cima do banco indo em task/shrink o sql me informa que ele possui 85% de espaço livre disponivel. Ok Então tento fazer manualmente e ele roda perfeitamente porém não diminui, repito esses passos umas 5 vezes ai na quinta ou sexta vez ele diminui o banco. No inicio achei que fosse alguma conexão no banco que poderia estar interferido mas fiz esse processo sem nenhum acesso a base e acontece o mesmo sintoma. Alguém já viu isso??
[]'s Douglas R. Oliveiraquinta-feira, 3 de fevereiro de 2011 10:47
Respostas
-
Se você roda o shrink todos os dias por conta de uma inserção muito grande na madrugada, a inserção muito grande vai demorar mais para rodar pois ela tem que esperar a alocação de mais espaço para os dados que serão inseridos.
Como já foi destacado, shrink não é uma boa prática, e não é recomendado, a não ser que REALMENTE você esteja precisando de espaço livre para outras coisas. O que pelo visto não é o seu caso, aja visto que a rotina precisa do espaço disponível para rodar todos os dias.
Por simplesmente não deixa de rodar o shrink?
Com isso você vai otimizar sua rotina de insert, e não vai causar a fragmentação.
Abraços
Fabiano Neves Amorim - MCTS / MCP - SQLServer - http://blogs.solidq.com/fabianosqlserver/- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 5 de junho de 2018 17:55
sexta-feira, 4 de fevereiro de 2011 14:24
Todas as Respostas
-
Olá Douglas,
Realmente muito estranho. veja se no errorlog do SQL não aparece nenhuma mensagem após você executar o comando de shrink.
Qual a versão/edição/build do seu SQL?
Como está o 'recovery model' da sua database?
Tente executar a seguinte sequencia para ver se corrige esta "esquisitisse"***********
Set the recovery model of the database to ‘SIMPLE’ and then run back up to ‘FULL’
Ran DBCC SHRINKFILE(<logical name>)
Article for further reading http://support.microsoft.com/kb/873235
***********Abraços,
Fábio Oliveira Support Engieer | Microsoft Enterprise and Developer Support- Editado Fábio Oliveira - SQL Team quinta-feira, 3 de fevereiro de 2011 11:37 Update
quinta-feira, 3 de fevereiro de 2011 11:29 -
Olá Fábio,
estou usando 2005 enterprise SP2.
Consultei os logs e não aparece nada.
[]'s Douglas R. Oliveiraquinta-feira, 3 de fevereiro de 2011 11:35 -
Olá,
Você tenteou executar com as recomendações que mandei acima?
Fábio Oliveira Support Engieer | Microsoft Enterprise and Developer Supportquinta-feira, 3 de fevereiro de 2011 12:13 -
Executei sim Fábio e continuo com os mesmo sintomas.
[]'s Douglas R. Oliveiraquinta-feira, 3 de fevereiro de 2011 12:54 -
Olá Douglas,
Realmente não sei o que pode ser a causa ... muito estranho....
Tente capturar um profiler Trace com todas as tentativas assim você tem base para comparação de quando funciona e quando não e assim podemos progredir na investigação.
Recomendação: Quando for possível atualize seu SQL para o SP4 Build 9.0.5000 (não acredito que estejam relacionados, mas com certeza você vai manter seu SQL em um build level suportado e com as ultimas correções de Performance, segurança e melhorias do produto)
Fábio Oliveira Support Engieer | Microsoft Enterprise and Developer Supportquinta-feira, 3 de fevereiro de 2011 13:05 -
Douglas, dei uma pesquisada, e uma duvida, voce chegou a restartar o servico do sql depois que comecou este problema?
---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.comquinta-feira, 3 de fevereiro de 2011 13:13Moderador -
Quais são os tamanhos reais arquivos (mdf/ldf)?
Se o arquivo de log ou mdf é muito grande, tente executar DBCC OPENTRAN para determinar a transação mais antiga...
pois parece que uma transação antiga aberta pode estar impedindo o arquivo de mdf/log de encolher significativamente.- Sugerido como Resposta CarlosHB quinta-feira, 3 de fevereiro de 2011 17:22
- Não Sugerido como Resposta Douglas R. Oliveira quinta-feira, 3 de fevereiro de 2011 17:37
quinta-feira, 3 de fevereiro de 2011 14:08 -
MDf está com 60gb o ldf 2mb.
Já diminui o ldf antes, pelo dbcc opentran não existe transações abertas.
[]'s Douglas R. Oliveiraquinta-feira, 3 de fevereiro de 2011 14:30 -
MDf está com 60gb o ldf 2mb.
Já diminui o ldf antes, pelo dbcc opentran não existe transações abertas.
[]'s Douglas R. Oliveiraquinta-feira, 3 de fevereiro de 2011 14:32 -
Olá Douglas,
Você consegue capturar o profiler trace como mencionei no meu post anterior?
Fábio Oliveira Support Engieer | Microsoft Enterprise and Developer Supportquinta-feira, 3 de fevereiro de 2011 17:18 -
Bom realmente é estranho isto, já passei por isto uma vez tb, tinha que fazer um shrink em um database e ele não reduzia o tamanho.
Pesquisando em vários fóruns e com uns professores de SQL que tive, eles diziam que com relação ao Shrink, a recomendação é não usar ele.
Acho que porque utilizando o banco de dados, os dados são incluídos, alterados e excluídos, com isso o SQL vai alocando espaço...
Você tem feito o REBUILD INDEX? (Para ajustar os espaços vazios que estão no meio do DATAFILE, e para alocá-los ao final do DATAFILE).- Sugerido como Resposta CarlosHB terça-feira, 1 de março de 2011 13:23
quinta-feira, 3 de fevereiro de 2011 17:21 -
Tentou seguir estes passos já?
1 - Defrag Indexes;
2 - Update Statistics;
3 - Shrink na Base;
- Sugerido como Resposta CarlosHB terça-feira, 1 de março de 2011 13:24
quinta-feira, 3 de fevereiro de 2011 17:30 -
<!-- [if gte mso 10]> <mce:style>
Douglas,
Primeiro de tudo, saiba que o comando "shrink" causa fragmentação , e isso degrada bastante o desempenho.
Para verificar o espaço usado por um database executa isso:
Se vc estiver na duvida se esses números estão corretos, executa isso para atualizar esses números:use database-desejado go exec sp_spaceused go
USE database-desejado; GO EXEC sp_spaceused @updateusage = N'TRUE'; GO
[]'s!
http://www.diaadiasql.com.brquinta-feira, 3 de fevereiro de 2011 18:18 -
Tenhos planos de manutenção que rodam quase que diariamente Rebuild, Reorganize e Update statistics.
O shrink só rode nesse banco especifico porque ele sofre uma inserção muito grande em uma tabela de log que truncada todos os dias a noite, por isso preciso fazer o shrink para voltar o tamanho do banco a sua realidade.
[]'s Douglas R. Oliveirasexta-feira, 4 de fevereiro de 2011 12:48 -
Olá Renato já vinha utilizando o sp_spaceused para ver o nivel e espaço de utilização do banco, ele está dentro correto levando em consideração que todos os dias noite tenho um job que trunca a tabela de log.
O que fiz de diferente e que deu um pouco certo, foi antes de rodar shrinkdatabase coloque o banco com offline e depois online... isso diminui minhas tentativas de 5 a 6 para no máximo 2 ou 3.
[]'s Douglas R. Oliveirasexta-feira, 4 de fevereiro de 2011 12:50 -
Se você roda o shrink todos os dias por conta de uma inserção muito grande na madrugada, a inserção muito grande vai demorar mais para rodar pois ela tem que esperar a alocação de mais espaço para os dados que serão inseridos.
Como já foi destacado, shrink não é uma boa prática, e não é recomendado, a não ser que REALMENTE você esteja precisando de espaço livre para outras coisas. O que pelo visto não é o seu caso, aja visto que a rotina precisa do espaço disponível para rodar todos os dias.
Por simplesmente não deixa de rodar o shrink?
Com isso você vai otimizar sua rotina de insert, e não vai causar a fragmentação.
Abraços
Fabiano Neves Amorim - MCTS / MCP - SQLServer - http://blogs.solidq.com/fabianosqlserver/- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 5 de junho de 2018 17:55
sexta-feira, 4 de fevereiro de 2011 14:24 -
Fabiano eu entendo isso, porém seu não fizer o shrink quase que diariamente ele enche o disco e para o servidor.
[]'s Douglas R. Oliveirasexta-feira, 4 de fevereiro de 2011 15:35 -
Este post foi encerrado por ser considerado um post antigo.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
terça-feira, 5 de junho de 2018 17:55Moderador