locked
Espaço em branco de tabelas RRS feed

  • 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é Luiz
    quarta-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é Luiz
    quarta-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:20
    Moderador
  • 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 DESC

     

     

    DEPOIS 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é Luiz
    quarta-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:20
    Moderador
  • 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 DESC

     

     

    DEPOIS 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:35
    Moderador
  • 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:34
    Moderador
  • 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