Páginas

30 de mar. de 2015

Compressão de dumps do Oracle Data Pump


Olá pessoal,

     No artigo de hoje vou comentar sobre o uso de compressão de dados nos dumps gerados com o Data Pump no Oracle Database, ressaltando algumas de suas vantagens e desvantagens, comparando-o com os utilitários de compressão Gzip e o Bzip2, existentes no Sistema Operacional Linux.

     Resolvi escrever este artigo porque recentemente tive que analisar na empresa em que trabalho, a melhor forma de comprimir os arquivos dos dumps full diários (que fazem parte da nossa estratégia de backup) para economizar espaço em disco nos LVMs do servidor. Dentre as opções disponíveis que encontrei em uma rápida pesquisa, verifiquei que eu poderia utilizar o recurso de compressão do próprio Data Pump ou os utilitários de compressão Gzip e Bzip2. Cada um possui as suas vantagens e desvantagens, que comentarei ao longo deste artigo.

     Para demonstrar os testes de compressão, utilizei uma máquina de testes de 64 bits, com 4 núcleos, SO Red Hat 4 e Oracle Database Enterprise Edition 11.2.0.3. Os dumps gerados nos testes contém todos os objetos de um schema do BD chamado TESTE, com tamanho estimado de 563.1 MB pelo Data Pump. Testes executados:
  
          1- Geração de dumps via Data Pump sem compressão de dados;
          2- Geração de dumps via Data Pump com compressão de dados. É importante ressaltar que para utilizar compressão de dados no Data Pump é necessário ter o licenciamento da option Advanced Compression (disponível somente na versão Enterprise Edition do SGBD Oracle).
          3- Compressão de dumps gerados no passo 1 com o utilitário Gzip v. 1.3.5;
          4- Compressão de dumps gerados no passo 1 com o utilitário Bzip2 v. 1.0.3.


TESTES DE COMPRESSÃO

1- Geração de dumps via Data Pump sem compressão de dados:
     Neste primeiro conjunto de testes gerei 3 dumps do schema TESTE, sem compressão, executando o comando abaixo no prompt de comandos do SO Linux:  
  $> expdp usuario/senha DIRECTORY=teste DUMPFILE=expdp_schema_sc.dmp LOGFILE=expdp_schema_sc.log SCHEMAS=teste COMPRESSION=NONE

    Resultado: Foi gerado um dump com 382 MB de dados em um tempo médio de 31s.


2- Geração de dumps via Data Pump com compressão de dados:
     Neste segundo conjunto de testes gerei 3 dumps do schema TESTE, com compressão, executando o comando abaixo no prompt de comandos do SO Linux:  
  $> expdp usuario/senha DIRECTORY=teste DUMPFILE=expdp_schema_cc.dmp LOGFILE=expdp_schema_cc.log SCHEMAS=teste COMPRESSION=ALL

    Resultado: Foi gerado um dump com 65 MB de dados em um tempo médio de 22s, ficando 5.87 X menor que o arquivo do 1º conjunto de testes. Repare que é mais rápido gerar o dump comprimido do que sem compressão, pois apesar da compressão consumir mais cpu, ela irá gerar menos I/O físico.


3- Compressão de dumps gerados no passo 1 com o utilitário Gzip:
     Neste terceiro conjunto de testes comprimi com o utilitário Gzip, 3 vezes os dumps gerados no 1º conjunto de testes, através do comando abaixo:
      $> gzip expdp_schema_sc.dmp

    Resultado: O arquivo expdp_schema_sc.dmp.gz foi comprimido em 17s com tamanho de 44 MB, ficando 8.68 X menor que o arquivo original, gerado no 1º conjunto de testes.


4- Compressão de dumps gerados no passo 1 com o utilitário Bzip2:
     Neste quarto e último conjunto de testes, comprimi com o utilitário Bzip2, 3 vezes os dumps gerados no 1º conjunto de testes, através do comando abaixo:
      $> bzip2 expdp_schema_sc.dmp

    Resultado: O arquivo expdp_schema_sc.dmp.bz2 foi comprimido em 1min59s com tamanho de 33 MB, ficando 11.5 X menor que o arquivo original, gerado no 1º conjunto de testes.

  
     Segue abaixo uma imagem que mostra os arquivos finais (com os seus respectivos tamanhos) gerados em cada conjunto de testes descritos acima:
Arquivos gerados em testes de compressão de dumps do Oracle Database



CONCLUSÃO

     1- Se precisarmos gerar os dumps comprimidos no menor tempo possível, a opção de compressão do próprio Data Pump é a mais eficiente, podendo gerar um dump no mínimo 2.2 X mais rápido que as demais opções testadas neste artigo. A principal desvantagem deste método de compressão é o elevado custo de licenciamento da option Advanced Compression.
  
     2- Se precisarmos gerar os dumps com o menor tamanho possível, a compressão através do utilitário Bzip2 é a mais eficiente, pois gerou arquivos com quase metade do tamanho da compressão nativa do Data Pump. A principal desvantagem deste método de compressão é o tempo necessário para efetuá-la, demorando 6.8 X (considerando o tempo de geração do dump + tempo de compactação) mais que a compressão do Data Pump. Se você precisar de uma ferramenta que não tenha a mesma eficiência na compactação, mas que consiga obter um resultado satisfatório em um tempo bem menor, opte por compactar com o Gzip, pois ele demora bem menos que o Bzip2.
  
     Na empresa em que trabalho, optamos por utilizar a compressão com o Gzip, pois além de comprimir mais que o Data Pump, o uso desta ferramenta é gratuito. Não optamos pelo Bzip2 porque apesar dele comprimir mais que o Gzip, o tempo de processamento dele é muito maior que o do Gzip, e isso poderia impactar negativamente para nós, no uso de CPU dos servidores de produção.

     Para quem quiser aprender mais sobre compressão de dumps com o Oracle Data Pump, recomendo a leitura complementar do artigo Segurança e compressão de dados com o Data Pump Export do Oracle 11g, do também Oracle ACE Eduardo Legatti, meu autor blogueiro brasileiro preferido (gosto muito da forma didática que ele escreve).

   
Bom pessoal, por hoje é só! Espero que o artigo seja útil e deixe seu comentário se tiver qualquer dúvida ou se você já teve alguma experiência similar!

[]s 



Referências:
     - What Is Data Pump Export?
     - Data Pump Enhancements in Oracle Database 11g Release 1 (expdp and impdp)
   

7 comentários:

  1. Olá Fábio,

    Parabéns pelo artigo. Muito bom conhecer essas dicas na hora de realizar um export via DataPump. Particularmente, já realizava nos ambientes de clientes que administro, geração de dumps (sem compressão) com GZIP, posteriormente. Obrigado por compartilhar seu conhecimento, pois agora tenho alternativas levando em consideração questões como tempo e tamanho do dump.

    Att,
    Andrey Macedo.

    ResponderExcluir
  2. Um outro utilitário a considerar é o xz

    ResponderExcluir
    Respostas
    1. Nunca usei... você teria algo para acrescentar informando as diferenças deles com relação ao gzip e bzip2?

      Excluir
    2. Resumindo ele seria um meio termo entre o bz2 e o gz. Nos testes que fiz tanto o tempo de compressão quanto o ratio ficam mais ou menos entre os dois citados acima. Dependendo do tipo de dump pode-se chegar a metade da compressão do gz com acrescimo de 30% no tempo de compressão. Para descompressão o tempo é semelhante ao gz e logicamente mais rápido que o bz2.

      Excluir
    3. Só a título de curiosidade também: o xz se tornou utilitário de compressão padrão do ArchLinux e do FreeBSD faz algum tempo. O fato se deve ao fato de serem Sistemas quase que totalmente "from scratch", onde você precisa baixar diariamente vários pacotes para manter o sistema atualizado, e ter arquivos mais compactos, mas que consomem menos cpu/memória para descompressão, é essencial. Existem alguns benchmarks na internet, acho que não vale a pena copiar e colar aqui. Recomendo que dê uma olhada nos testes que fizeram e, dependendo do caso, vale mais usar o xz que o gz, ou se a pessoa usa o bz2, vale com certeza mudar para o xz.

      Excluir
    4. Obrigado pelas informações Hierra!

      Excluir