none
Descobrir registro que ocupa maior espaço na tabela RRS feed

  • Pergunta

  • Pessoal

    tem um cliente que quer saber qual registro dentro da tabela ocupa mais espaço. a tabela armazena imagens e documentos.

    eu sei que a procedure

    Exec sp_spaceused TABELA

    retorna o que a tabela ocupa de espaço no servidor. há uma maneira de descobrir qual linha de uma tabela ocupa mais espaço?

    abraços

    Anderson Rodrigues
    terça-feira, 10 de março de 2009 18:41

Respostas

  • Boa Noite,

    Bem, não tenho a solução, mas tenho três abordagens.

    A primeira seria colocar uma coluna de tamanho e no momento da inclusão você calcularia o tamanho do arquivo e gravaria nessa coluna. Essa abordagem permitirá fazer vários cálculos, ranqueamentos, estimativas, etc de forma muito fácil, pois, se há uma coluna com o tamanho, basta uma simples consulta SQL.

    A segunda seria fazer um SUM do LEN de todas as colunas e ver qual tem a maior somatória (não sei se esse método é preciso com LOBs).

    A terceira é fazer com que o SQL Server informe o tamanho de cada linha. Eu tenho um leve palpite de que DMVs eu conseguiria essa informação, mas essa sua dúvida vai me fazer pensar (normalmente respondo as demais threads sem pensar ou pensando muito pouco).

    Infelizmente hoje estou me ausentando do fórum pelos próximos dias, pois, após mais de dois anos sem férias (e muito SQL Server) e um Summit bem corrido estou indo viajar para a praia. Vou pensar durante a viagem, pois, isso é um bom assunto para um artigo.

    O caminho das pedras inclui DMVs como sys.allocation_units, sys.system_internals_allocation_units e o trace flag 3604

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Será que LEFT OUTER JOIN e RIGHT OUTER JOIN são sinôminos de *= e =* ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 11 de março de 2009 04:17

Todas as Respostas

  • Boa Noite,

    Mas que curiosidadezinha mais trabalhosa (rs)...

    Não tenho uma forma padrão para responder, pois, nunca havia pensado em algo do tipo.

    Tenho algumas idéias em mente, mas é 2000 ou 2005 ou 2008 ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Será que LEFT OUTER JOIN e RIGHT OUTER JOIN são sinôminos de *= e =* ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 11 de março de 2009 02:50
  • "Mas que curiosidadezinha mais trabalhosa (rs)..."

    por isso vamos cobrar muito caro... rs

    é para sql server 2005...
    Anderson Rodrigues
    quarta-feira, 11 de março de 2009 02:57
  • Boa Noite,

    Bem, não tenho a solução, mas tenho três abordagens.

    A primeira seria colocar uma coluna de tamanho e no momento da inclusão você calcularia o tamanho do arquivo e gravaria nessa coluna. Essa abordagem permitirá fazer vários cálculos, ranqueamentos, estimativas, etc de forma muito fácil, pois, se há uma coluna com o tamanho, basta uma simples consulta SQL.

    A segunda seria fazer um SUM do LEN de todas as colunas e ver qual tem a maior somatória (não sei se esse método é preciso com LOBs).

    A terceira é fazer com que o SQL Server informe o tamanho de cada linha. Eu tenho um leve palpite de que DMVs eu conseguiria essa informação, mas essa sua dúvida vai me fazer pensar (normalmente respondo as demais threads sem pensar ou pensando muito pouco).

    Infelizmente hoje estou me ausentando do fórum pelos próximos dias, pois, após mais de dois anos sem férias (e muito SQL Server) e um Summit bem corrido estou indo viajar para a praia. Vou pensar durante a viagem, pois, isso é um bom assunto para um artigo.

    O caminho das pedras inclui DMVs como sys.allocation_units, sys.system_internals_allocation_units e o trace flag 3604

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Será que LEFT OUTER JOIN e RIGHT OUTER JOIN são sinôminos de *= e =* ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 11 de março de 2009 04:17
  • muito obrigado, já me deu bastante coisa pra pensar, e para pesquisar... valeu de novo...
    Anderson Rodrigues
    quarta-feira, 11 de março de 2009 04:23