Utilizando o DBMS_COMPRESSION no Oracle: Guia Completo
O DBMS_COMPRESSION é um pacote do Oracle Database que fornece ferramentas para comprimir e descomprimir dados. A compressão de dados pode melhorar significativamente o desempenho do banco de dados ao reduzir o espaço de armazenamento necessário e melhorar a eficiência de E/S (entrada/saída).
Introdução ao DBMS_COMPRESSION
O Oracle Database oferece vários métodos de compressão, incluindo a compressão OLTP (Online Transaction Processing), compressão de tabela básica e compressão de backup. O pacote DBMS_COMPRESSION é utilizado para gerenciar e analisar esses métodos de compressão.
Principais Funcionalidades
- Obter Consultas de Compressão: Avalia a viabilidade da compressão em uma tabela ou partição.
- Estimativas de Compressão: Fornece estimativas de taxas de compressão.
- Execução de Compressão: Comprime e descomprime dados.
Tipos de Compressão
- COMP_TYPE_BASIC: Compressão básica, ideal para dados estáticos que não mudam com frequência.
- COMP_TYPE_OLTP: Compressão OLTP, adequada para ambientes de alta transação, oferecendo um equilíbrio entre compressão e desempenho.
- COMP_TYPE_ARCHIVE_HIGH: Alta compressão para arquivamento, utilizado em dados históricos e raramente acessados.
- COMP_TYPE_ARCHIVE_LOW: Compressão de baixa taxa para arquivamento, utilizada para dados menos críticos.
- COMP_TYPE_QUERY_HIGH: Alta compressão para consultas, adequada para ambientes de data warehouse.
- COMP_TYPE_QUERY_LOW: Compressão de baixa taxa para consultas, também usada em ambientes de data warehouse, mas com menos compressão que a alta.
Exemplos de Códigos
Estimativa de Compressão
Este exemplo demonstra como obter uma estimativa de compressão para uma tabela.
DECLARE
blkcnt_cmp NUMBER;
blkcnt_uncmp NUMBER;
row_cmp NUMBER;
comptype_str VARCHAR2(20);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO(
schema_name => 'HR',
object_name => 'EMPLOYEES',
subobject_name => NULL,
partname => NULL,
comptype => DBMS_COMPRESSION.COMP_TYPE_BASIC,
blkcnt_cmp => blkcnt_cmp,
blkcnt_uncmp => blkcnt_uncmp,
row_cmp => row_cmp,
compress_for => comptype_str
);
DBMS_OUTPUT.PUT_LINE('Compressed Blocks: ' || blkcnt_cmp);
DBMS_OUTPUT.PUT_LINE('Uncompressed Blocks: ' || blkcnt_uncmp);
DBMS_OUTPUT.PUT_LINE('Compressed Rows: ' || row_cmp);
DBMS_OUTPUT.PUT_LINE('Compression Type: ' || comptype_str);
END;
/
Compressed Blocks: 10
Uncompressed Blocks: 20
Compressed Rows: 100
Compression Type: BASIC
PL/SQL procedure successfully completed.
Compressão de Tabela
Este exemplo mostra como comprimir uma tabela existente usando a compressão básica.
SQL> ALTER TABLE hr.employees MOVE COMPRESS BASIC;
Table altered.
Compressão OLTP
Este exemplo demonstra como habilitar a compressão OLTP em uma tabela.
SQL> ALTER TABLE hr.employees MOVE COMPRESS FOR OLTP;
Table altered.
Análise de Compressão
Este exemplo realiza uma análise detalhada da compressão em uma tabela.
DECLARE
blkcnt_cmp NUMBER;
blkcnt_uncmp NUMBER;
row_cmp NUMBER;
comptype_str VARCHAR2(20);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO(
schema_name => 'HR',
object_name => 'EMPLOYEES',
comptype => DBMS_COMPRESSION.COMP_TYPE_OLTP,
blkcnt_cmp => blkcnt_cmp,
blkcnt_uncmp => blkcnt_uncmp,
row_cmp => row_cmp,
compress_for => comptype_str
);
DBMS_OUTPUT.PUT_LINE('Compressed Blocks: ' || blkcnt_cmp);
DBMS_OUTPUT.PUT_LINE('Uncompressed Blocks: ' || blkcnt_uncmp);
DBMS_OUTPUT.PUT_LINE('Compressed Rows: ' || row_cmp);
DBMS_OUTPUT.PUT_LINE('Compression Type: ' || comptype_str);
END;
/
Compressed Blocks: 15
Uncompressed Blocks: 30
Compressed Rows: 200
Compression Type: OLTP
PL/SQL procedure successfully completed.
Compressão para Arquivamento
Este exemplo demonstra como usar a compressão de alta taxa para arquivamento em uma tabela.
SQL> ALTER TABLE hr.employees MOVE COMPRESS FOR ARCHIVE HIGH;
Table altered.
Compressão para Consultas
Este exemplo demonstra como usar a compressão de alta taxa para consultas em um data warehouse.
SQL> ALTER TABLE hr.employees MOVE COMPRESS FOR QUERY HIGH;
Table altered.
Casos de Uso
Melhoria do Desempenho de Armazenamento
A compressão pode reduzir significativamente o espaço em disco necessário para armazenar dados. Em ambientes com grandes volumes de dados, isso pode resultar em economias substanciais de custo.
Melhoria da Performance de E/S
Ao reduzir o número de blocos necessários para armazenar dados, a compressão pode diminuir a carga de E/S, melhorando o desempenho geral do banco de dados.
Eficiência em Backups
Os backups de dados comprimidos são menores e, portanto, mais rápidos de executar e restaurar, o que é crítico em ambientes que exigem alta disponibilidade.
Gestão de Dados Históricos
A compressão é especialmente útil para tabelas de histórico e dados raramente acessados, onde o desempenho da E/S não é um fator crítico, mas a economia de espaço é fundamental.
Conclusão
Utilizando as funcionalidades do DBMS_COMPRESSION, os administradores de banco de dados podem otimizar o uso de espaço em disco e melhorar o desempenho das operações de E/S. Os exemplos e casos de uso fornecidos demonstram como este pacote pode ser integrado em diversas estratégias de gestão de dados.
Abs
Referências
- Oracle Documentation: DBMS_COMPRESSION
- Oracle Database Concepts: Data Compression
- Oracle White Paper: Best Practices for Advanced Compression