Árvore de páginas

O que é a compressão de dados?

Este é um recurso que pode ser utilizado com o Protheus para melhorar a performance e otimizar o consumo de espaço em disco do banco de dados. Com isto, você pode reduzir o tamanho do banco de dados em até 70%, ganhando agilidade na leitura, escrita e no tempo de restore

Atenção: Tipos de compressão

Alguns dos métodos utilizados no teste e expostos nesta página fazem parte do pacote Oracle Advanced Compression (disponível a partir da versão 12c), que deve ser contratado à parte com o fabricante. Confira a página do fornecedor sobre a compressão avançada e o data sheet disponibilizado. Além destas páginas, há também um artigo no blog da Oracle sobre a compressão.

Tipos de compressão de dados no Oracle

Oracle Advanced Compression

Esta feature está disponível a partir da versão 9i, tendo alguns métodos disponíveis a partir da versão 12c. 

A Basic Table Compression (compressão básica de tabelas) é disponibilizada com a licença Enterprise do Oracle Database, e não representa custos à parte deste licenciamento para uso; já o pacote Oracle Advanced Compression (compressão avançada) contempla diferentes tipos de compressão. Dentre estes, foram avaliados os tipos Advanced Row Compression e Advanced Index Compression no nível High.

Não há opções de compressão para edições Standard das databases. Antes de realizar qualquer operação de compressão, verifique junto ao fornecedor se isto representará algum custo adicional. A TOTVS não se responsabiliza por custos adicionais causados pelo uso das features descritas nesta página.

Conforme constatado abaixo, não há opção de compressão para databases Standard. Para mais informações sobre features e licenciamento, consulte a documentação do fabricante.

Quais são os benefícios da compressão de dados?

Há uma redução significativa no espaço em disco consumido, bem como diminuição de quantidade de I/O, otimizando o desempenho de instruções SELECT e DELETE.

Quais os impactos da compressão de dados?

Além do descrito acima, é provável o aumento do consumo de CPU na máquina de banco de dados. 

O tipo de compressão escolhida influencia na frequência de manutenções e execuções de script na base de dados. Antes de executar qualquer manutenção, meça o esforço necessário para o gerenciamento da base com compressão aplicada.

Qual tipo de compressão utilizar?

Foram avaliadas as seguintes opções: Basic Table Compression, Advanced Row Compression e Advanced Index Compression. Avalie, junto a um DBA, quais tabelas devem receber a compressão e qual modo é o ideal para seu ambiente.

Testes com a compressão

Nos testes realizados foi utilizado o Oracle Database 19c Enterprise, com os binários Harpia e release 12.1.33 do Protheus.

A base de dados foi inicialmente carregada com pouco mais de 100GB; o gráfico abaixo representa o tamanho total da base sem compressão (NoCompress), com a compressão básica de tabelas aplicada (Basic) e com a compressão avançada de índices e tabelas (Advanced). Neste caso, a compressão avançada trouxe 88% de redução no tamanho total da base.

Atenção - Percentual de redução

Este percentual é variável de acordo com sua arquitetura e com os dados existentes na base; o valor apresentado é apenas uma referência oriunda do teste de homologação da feature.

Os scripts disponibilizados realizam um select em sua base de dados. Selecione o resultado do select e, com acompanhamento de um DBA, execute o retorno para que a compressão seja efetuada.

Nos scripts, substitua '%schema%' para o Schema do Protheus.

Ordem dos scripts

Ao executar a compressão ou remover a compressão, realize primeiro as operações nas tabelas, após isto, realize a operação nos índices; isto evitará que os índices fiquem desatualizados.

A compressão básica para tabelas (Basic Table Compression) é disponibilizada com a versão Enterprise do Oracle e não tem custo adicional para ser utilizada. Esta atua somente em cargas diretas (ALTER TABLE), e não nos dados carregados com operações DML (Insert Updates), que representam o padrão de alterações de um ERP. É importante ressaltar que isto demandará manutenções frequentes na base de dados. Caso seja possível realizar paradas frequentes em seu ambiente para manutenções periódicas, este tipo de compressão pode atender, tendo o custo do esforço para executá-la. Sempre consulte um DBA para avaliação do ambiente e estudo do impacto de uma alteração em sua base de dados.  

set pagesize 0
set feedback off
select 'ALTER TABLE '||owner||'.'||table_name||' MOVE COMPRESS;' 
from dba_tables 
where OWNER='%schema%';

Atenção

A compressão avançada é uma feature adicional, contratada separadamente com o fornecedor.

Este tipo de compressão se adequa melhor à ambientes OLTP (On-Line Transaction Processing), ou seja, sistemas transacionais, e compacta dados manipulados por quaisquer operações SQL.

Compressão avançada de tabelas
set pagesize 0
set feedback off
select 'ALTER TABLE '||owner||'.'||table_name||' MOVE ROW STORE COMPRESS ADVANCED;'
from dba_tables 
where OWNER='%schema%';
Rebuild com compressão avançada de índices
set pagesize 0
set feedback off
select 'alter index '||owner||'.'||index_name||' rebuild COMPRESS ADVANCED HIGH;' 
from dba_indexes
where OWNER='%schema%'
and index_name not LIKE '%$$%'
and index_name not LIKE '%_PK';
Rebuild de índices primários (PK)
set pagesize 0
set feedback off
select 'alter index '||owner||'.'||index_name||' rebuild;' from dba_indexes
where OWNER='%schema%'
and index_name LIKE '%_PK';

A remoção da compressão de dados pode ser necessária em determinados casos, por exemplo, ao migrar uma base de dados para outra versão ou para uma instalação que não possua o licenciamento necessário desta feature. Nestes casos, disponibilizamos os scripts para a remoção da compressão.

Removendo a compressão de tabelas
set pagesize 0
set feedback off
select 'ALTER TABLE '||owner||'.'||table_name||' MOVE NOCOMPRESS;' 
from dba_tables
where OWNER='%schema%';
Rebuild de índices removendo a compressão
set pagesize 0
set feedback off
select 'alter index '||owner||'.'||index_name||' rebuild NOCOMPRESS;' 
from dba_indexes
where OWNER='%schema%'
and index_name not LIKE '%$$%'
and index_name not LIKE '%_PK';
Rebuild de índices primários (PK)
set pagesize 0
set feedback off
select 'alter index '||owner||'.'||index_name||' rebuild;' from dba_indexes
where OWNER='%schema%'
and index_name LIKE '%_PK';
  • Sem rótulos