Pular para o conteúdo

Utilizando o DBMS_COMPRESSION no Oracle: Guia Completo

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.

PLSQL
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;
/

PLSQL
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
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
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.

PLSQL
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;
/

PLSQL
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
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
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

Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress