none
Forma de armazenamento SQL Server RRS feed

  • Pergunta

  • Olá pessoal, vejam meu caso: Tenho um sistema de armazenamento de documentos eletrônicos, NF-e por exemplo. Neste, armazeno os arquivos XML em campos varbinary(max). Minha dúvia é a seguinte, supomos que tenho um arquivo de 8KB, ao armazená-lo, o arquivo de banco de dados cresce 8KB ou existe uma compactação antes de armazenar?

    Venho de outros SGBDs que existe uma compactação, por isso minha dúvida. O SQL Server compacta as informações antes de armazenar ou o banco cresce exatamente de acordo com os bytes que incluo?

    Preciso disso, pois haverá casos nesse software onde será cobrado pelo espaço armazenado, daí precisaria obter um indicador para efetuar o cálculo do custo....

    Usamos SQL Server 2008 R2 Enterprise.

    Agradeço.

    sexta-feira, 8 de julho de 2011 18:55

Respostas

  • Boa Tarde,

    Por padrão nenhum banco de dados irá compactar antes de armazenar. A compactação economiza espaço, mas custa CPU no momento de recuperá-lo e não é justo impor essa escolha, pois, pode ser que o desempenho seja mais importante que o espaço. O que acontece é que vários bancos (inclua o SQL Server 2008) oferecem recursos de compactação, mas normalmente eles não são ativados por padrão.

    Embora os bancos aumentem de acordo com a informação que são gravadas, não há uma relação direta. Um arquivo de 8K irá ocupar 8K de espaço, mas pode ser que ele aloque um novo bloco de 64k, porque os blocos estão cheios e aí o arquivo de 8K gastou 64K (fora os índices). Posteriormente, como foi alocado 64K, os próximos arquivos podem sequer alocar mais espaço. Acredito que a melhor forma é capturar o tamanho médio da linha (sp_spaceused)e tirar uma média.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta signori8 sexta-feira, 8 de julho de 2011 19:16
    sexta-feira, 8 de julho de 2011 19:06

Todas as Respostas

  • Boa Tarde,

    Por padrão nenhum banco de dados irá compactar antes de armazenar. A compactação economiza espaço, mas custa CPU no momento de recuperá-lo e não é justo impor essa escolha, pois, pode ser que o desempenho seja mais importante que o espaço. O que acontece é que vários bancos (inclua o SQL Server 2008) oferecem recursos de compactação, mas normalmente eles não são ativados por padrão.

    Embora os bancos aumentem de acordo com a informação que são gravadas, não há uma relação direta. Um arquivo de 8K irá ocupar 8K de espaço, mas pode ser que ele aloque um novo bloco de 64k, porque os blocos estão cheios e aí o arquivo de 8K gastou 64K (fora os índices). Posteriormente, como foi alocado 64K, os próximos arquivos podem sequer alocar mais espaço. Acredito que a melhor forma é capturar o tamanho médio da linha (sp_spaceused)e tirar uma média.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta signori8 sexta-feira, 8 de julho de 2011 19:16
    sexta-feira, 8 de julho de 2011 19:06
  • Obrigado Gustavo, já havia feito algumas simulações usando a sp_spaceused, so queria ter certeza. Vou seguir esse caminho..

    Obrigado!

    sexta-feira, 8 de julho de 2011 19:20
  • Boa Tarde,

    Por padrão nenhum banco de dados irá compactar antes de armazenar. A compactação economiza espaço, mas custa CPU no momento de recuperá-lo e não é justo impor essa escolha, pois, pode ser que o desempenho seja mais importante que o espaço. O que acontece é que vários bancos (inclua o SQL Server 2008) oferecem recursos de compactação, mas normalmente eles não são ativados por padrão.

    Embora os bancos aumentem de acordo com a informação que são gravadas, não há uma relação direta. Um arquivo de 8K irá ocupar 8K de espaço, mas pode ser que ele aloque um novo bloco de 64k, porque os blocos estão cheios e aí o arquivo de 8K gastou 64K (fora os índices). Posteriormente, como foi alocado 64K, os próximos arquivos podem sequer alocar mais espaço. Acredito que a melhor forma é capturar o tamanho médio da linha (sp_spaceused)e tirar uma média.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível


    Signori,

         Isso tudo, claro, se a tabela ja tiver um certo tamanho e não for um extent misto...

     


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
    quarta-feira, 13 de julho de 2011 03:27
    Moderador