Usuário com melhor resposta
Espaço em branco de tabelas

Pergunta
-
Bom dia pessoal... meu banco está grande demais e isso está me atrapalhando nos backups, li alguns artigos aqui no fórum e vi que o problema pode ser resolvido "tirando" os espaços em brancos de uma tabela.... mas não compreendi os comando pois assim que eu os executo minha tabela fica com o mesmo tamanho....
alguém já passou por isso ? tem um usuário que garante que pode deixar o banco de 5 Gb para 1 gb .... será que é possível..?
att,
José Luizquarta-feira, 13 de junho de 2007 13:20
Respostas
-
depende da quantidade de "espaco", na verdade isso esta relacionado ao fill factor das tabelas, mais nao e legal deixar justinho nao vc. precisa dos espacos para que quando seu branco cresca ele nao fique fazendo isso a toda a hora, por isso e bem ter +- 20- 30% do tamanho real da base.
com o dbcc srhinkfile vc. faz isso veja no books on line sobre ele qualquer duvida retorne.
Abs;
quarta-feira, 13 de junho de 2007 13:28 -
Opa... obrigado por responder...
é eu ja usei este comando... ele só dimunuiu o tamanho do LogFile....
este fill factor que deixa meu banco grande ? pois na verdade assim, durante todo o ano de 2006 meu banco cresceu de 1Gb para 1,8 Gb ... ficou nisso... agora em 2007 meu banco já está em 6 Gb, e não tenho informações para isso... já deixei o recovery para simple e ele parou de creser excessivamente, só que agora eu não sei como diminuir o banco...
Então fico assim mesmo ? é a melhor opção, dixar como está ?
Att,
José Luizquarta-feira, 13 de junho de 2007 16:04 -
se vc. usar o srhinkfile no aquivo de log ele vai baixar o log, se usar no arquivo de dados ele vai baixar o arquivo de dados.
Abs;
quarta-feira, 13 de junho de 2007 16:24 -
Utilize o DBCC ShrinkFile.
quarta-feira, 13 de junho de 2007 18:20Moderador -
opa.... obrigado por responder....
é estou com um problemão....
usei o DBCC shirinkFile e continua com o mesmo tamanho de arquivo....
o pior que eu sei que não tenho registro para ter 6gb .... o que mais eu posso fazer.. ?
sexta-feira, 15 de junho de 2007 15:49 -
Pessoal andando pelo fórum encontrei algo parecido com o que preciso...
'AQUI PEGA AS TABELAS QUE ESTÃO COM ESPAÇO NÃO USADO
SELECT object_name(id) AS name,
indid,
rowcnt AS rows,
reserved * 8 AS reserved_kb,
dpages * 8 AS data_kb,
(sum(used) * 8) - (dpages * 8) AS index_size_kb,
(sum(reserved) * 8) - (sum(used) * 8) AS unused_kb
FROM sysindexes
WHERE indid IN (0,1) -- cluster e não cluster
AND OBJECTPROPERTY(id, 'IsUserTable') = 1
GROUP BY id, indid, rowcnt, reserved, dpages
ORDER BY rowcnt DESCDEPOIS TENHO QUE EXECUTAR ESTES COMANDOS, QUE EU ENTENDI PARA BAIXAR OS ESPAÇOS EM BRANCO MAS NADA ACONTECE....
sp_spaceused @updateusage = 'TRUE'
o que será que está acontecendo ?
sexta-feira, 15 de junho de 2007 16:05 -
é parece que um dos meus scripts foram longe heim...rrss
o comando SP_SPACEUSED com o parametro UPDATEUSAGE = true, atualiza a visualização dos dados caso.
com o SELECT do script, veja as tabelas que possuam um valor alto na coluna UNUSED_KB.
para as tabelas que possuirem o valor alto, verifique se a tabela possui um indice do tipo CLUSTER, caso não exista altere um dos indices da tabela para CLUSTER e execute o SELECT novamente para ver se o valor de UNUSED_KB ficou menor.
depois de reorganizar as paginas de dados você pode voltar o indice para NONCLUSTERED caso seja necessário.
sábado, 16 de junho de 2007 02:19 -
opa beleza ?
hehe .... viu o script achei em outro tópico que voce respondeu....
cara deu certo.... fiz em uma tabela e baixou consideravelmente o espaço...... agora vou fazer em todas as tabelas do banco....
Valew galera....
sábado, 16 de junho de 2007 14:23
Todas as Respostas
-
depende da quantidade de "espaco", na verdade isso esta relacionado ao fill factor das tabelas, mais nao e legal deixar justinho nao vc. precisa dos espacos para que quando seu branco cresca ele nao fique fazendo isso a toda a hora, por isso e bem ter +- 20- 30% do tamanho real da base.
com o dbcc srhinkfile vc. faz isso veja no books on line sobre ele qualquer duvida retorne.
Abs;
quarta-feira, 13 de junho de 2007 13:28 -
Opa... obrigado por responder...
é eu ja usei este comando... ele só dimunuiu o tamanho do LogFile....
este fill factor que deixa meu banco grande ? pois na verdade assim, durante todo o ano de 2006 meu banco cresceu de 1Gb para 1,8 Gb ... ficou nisso... agora em 2007 meu banco já está em 6 Gb, e não tenho informações para isso... já deixei o recovery para simple e ele parou de creser excessivamente, só que agora eu não sei como diminuir o banco...
Então fico assim mesmo ? é a melhor opção, dixar como está ?
Att,
José Luizquarta-feira, 13 de junho de 2007 16:04 -
se vc. usar o srhinkfile no aquivo de log ele vai baixar o log, se usar no arquivo de dados ele vai baixar o arquivo de dados.
Abs;
quarta-feira, 13 de junho de 2007 16:24 -
Utilize o DBCC ShrinkFile.
quarta-feira, 13 de junho de 2007 18:20Moderador -
opa.... obrigado por responder....
é estou com um problemão....
usei o DBCC shirinkFile e continua com o mesmo tamanho de arquivo....
o pior que eu sei que não tenho registro para ter 6gb .... o que mais eu posso fazer.. ?
sexta-feira, 15 de junho de 2007 15:49 -
Pessoal andando pelo fórum encontrei algo parecido com o que preciso...
'AQUI PEGA AS TABELAS QUE ESTÃO COM ESPAÇO NÃO USADO
SELECT object_name(id) AS name,
indid,
rowcnt AS rows,
reserved * 8 AS reserved_kb,
dpages * 8 AS data_kb,
(sum(used) * 8) - (dpages * 8) AS index_size_kb,
(sum(reserved) * 8) - (sum(used) * 8) AS unused_kb
FROM sysindexes
WHERE indid IN (0,1) -- cluster e não cluster
AND OBJECTPROPERTY(id, 'IsUserTable') = 1
GROUP BY id, indid, rowcnt, reserved, dpages
ORDER BY rowcnt DESCDEPOIS TENHO QUE EXECUTAR ESTES COMANDOS, QUE EU ENTENDI PARA BAIXAR OS ESPAÇOS EM BRANCO MAS NADA ACONTECE....
sp_spaceused @updateusage = 'TRUE'
o que será que está acontecendo ?
sexta-feira, 15 de junho de 2007 16:05 -
é parece que um dos meus scripts foram longe heim...rrss
o comando SP_SPACEUSED com o parametro UPDATEUSAGE = true, atualiza a visualização dos dados caso.
com o SELECT do script, veja as tabelas que possuam um valor alto na coluna UNUSED_KB.
para as tabelas que possuirem o valor alto, verifique se a tabela possui um indice do tipo CLUSTER, caso não exista altere um dos indices da tabela para CLUSTER e execute o SELECT novamente para ver se o valor de UNUSED_KB ficou menor.
depois de reorganizar as paginas de dados você pode voltar o indice para NONCLUSTERED caso seja necessário.
sábado, 16 de junho de 2007 02:19 -
opa beleza ?
hehe .... viu o script achei em outro tópico que voce respondeu....
cara deu certo.... fiz em uma tabela e baixou consideravelmente o espaço...... agora vou fazer em todas as tabelas do banco....
Valew galera....
sábado, 16 de junho de 2007 14:23 -
Qual impacto pode ter com essa limpeza de espaços em branco na tabela? O que ele faz é semelhante ao quando é rodado o shrink? Se eu fizer isso em todas as tabelas o banco vai ficar com espaço não usado zerado e toda vez que precisar crescer terá que ficar aumentando o tamanho do banco?
Grata!!!
terça-feira, 19 de junho de 2007 11:29 -
isso mesmo o ideal e vc. analisar quando fazer e o % que deve deixar para o crescimento do banco,pois o overhead para o crescimento do banco deve ser considerado nesse ponto, crie uma proc que armazene o crescimento do seu banco e use o srhink por x% do total do banco ...
Abs.
terça-feira, 19 de junho de 2007 11:49 -
Lara,
Com certeza este impacto esta relacionado ao tamanho físico e lógico do seu banco de dados, representando algum tipo de ganho de performance e proporcionando também um tempo menor no backup.
Na verdade a limpeza deste espaços em branco não representam diretamente um shrink, mas sim uma manutenção e pode ajudar bastantes os campos que possuem índices.
Em relação ao tamanho do banco estes espaços devem ser removidos em todas as tables, mas o crescimento deve ser feito um monitoramente para procurar determinar a melhor medida.
terça-feira, 19 de junho de 2007 12:35Moderador -
Tudo bem, mas com esse comando spaceused não dá pra definir quanto deixar de %. Outra coisa curiosa: tenho um banco com tamanho de 1132 MB, cujo espaço livre é de 2MB. Teoricamente estão sendo bem aproveitado, visto que não possui espaço livre ocupando espaço à toa. Porém ao executar a query que foi postada acima, no campo unused_kb, para a maior tabela que eu tenho dentro desse banco, possui um valor aparentemente alto 1167304. Não consigo entender que valores são esses. Agradeço se alguém puder explicar isso melhor.terça-feira, 19 de junho de 2007 12:57
-
o retorno da sp_spaceused e em Kb basicamente a diferenca do que foi reservado contra o que esta usando, por exemplo se vc.tem um campo varchar(20) e so tem um char neste campo vc. esta reservando 20 mais so estausando 1.
Abs.
terça-feira, 19 de junho de 2007 13:26 -
Resumindo, será que esse comando pode ser usado em qualquer situação, ou há alguma restrição?
Grata!!!
terça-feira, 19 de junho de 2007 14:24 -
Lara,
Completando a resposta do Marcelo, esta stored procedure tem como objetivo informar o espaço utilizado no banco, bem como, o espaço livre existente em kilobytes.
Mas não é através dela que você poderá fazer a alteração destes valores.
terça-feira, 19 de junho de 2007 14:34Moderador -
Resumindo, gostaria de saber se posso aplicar esse comando spaceused em qualquer tabela ou se há alguma restrição ou situação que não é conveniente.
Grata!!!
terça-feira, 19 de junho de 2007 15:06 -
Desculpe, postei a mesma msg duas vezes.terça-feira, 19 de junho de 2007 15:09
-
bom o ideal e vc.usar a soma dos bytes alocados calculando elas por linha e por tipo de dado, no caso de fillfactor existem outros dois fatores que afetam o resultado dessa proc fill factor e padindex.
Abs.
terça-feira, 19 de junho de 2007 15:48