Oracle Exadata Database Machine: “Exadata Hybrid Columnar Compression (EHCC)”

Por Deiby Gómez Robles y Yenugula Venkata RaviKumar (Oracle Certified Master)
Publicado en enero 2014

Introducción

Reciban un cordial saludo estimados tecnólogos Oracle, en esta oportunidad estaremos tratando un tema muy común, que en más de alguna ocasión tuvimos que pasar (o pasaremos), estamos refiriéndonos al problema de manejar grandes cantidades de datos en una ambiente donde no tenemos suficiente espacio y además, no debemos afectar tanto el rendimiento de nuestras aplicaciones. Bueno, una de las características que Oracle nos provee para manejar adecuadamente este tipo de escenarios es la compresión de los datos utilizando "Hybrid Columnar Compression" que en esta ocasión lo estaremos aplicando en un ambiente de "Oracle Exadata Machine". Veremos en qué nos puede beneficiar esta característica y también analizaremos resultados de Compresión entre los diferentes tipos que existen.

"Exadata Hybrid Columnar Compression" es una característica incluida dentro de los "Exadata Storage Server". Esta funcionalidad provee un alto nivel de compresión de datos en objetos de una base de datos Oracle y tiene la posibilidad de personalizar el nivel de compresión dependiendo si el ambiente es de tipo OLTP (escrituras y lecturas frecuentes hacia datos no secuenciales) o del tipo "Datawarehousing" (consultas frecuentes hacia grandes cantidades de datos).

Esta característica permite a la base de datos reducir el número de lecturas y escrituras físicas requeridas para analizar una tabla, de esta manera grandes cantidades de información pueden ser procesadas rápidamente sin caer en altas tasas de I/O.

Es posible utilizar "Exadata Hybrid Columnar Compression" en varios niveles:

  • Nivel de tabla
  • Nivel de partición
  • Nivel de Tablespace

Existen dos tipos de "Exadata Hybrid Columnar Compression":

  • Warehouse Compression
        • Optimiza el rendimiento de consultas
        • Adecuado para datos de aplicaciones del tipo "Warehouse".
        • Existen dos opciones: Query High y Query Low
  • Online Archival Compression
        • Se enfoca en obtener una máxima compresión de los datos.
        • Adecuado para datos que no cambian frecuentemente.
        • Existen dos opciones: Archive High y Archive Low

Sintaxis para comprimir una tabla

Query Compression:

CREATE TABLE emp (…)  COMPRESS FOR QUERY [LOW | HIGH];

    

Archive Compression:

CREATE TABLE emp (…) COMPRESS FOR ARCHIVE [LOW | HIGH];

    

Nota: Si la tabla que se desea comprimir ya existe, se puede utilizar uno de los siguientes métodos:

  • Utilizando el paquete DBMS_REDEFINITION
  • ALTER TABLE <NOMBRE TABLA> MOVE COMPRESS FOR <TIPO COMPRESION>;

Organización de los datos

Las tablas son organizadas dentro de unidades de compresión (CU) tal como lo muestra la siguiente imagen:

El tamaño de un CU comúnmente es de 32KB y está dado por la siguiente fórmula:

Tamaño de un CU=Tamaño de un bloque x No. de Bloques dentro del CU

Ejemplo:
Tamaño de un bloque: 8KB
No. de bloques en un CU: 4
Tamaño de un CU: 8KB x 4=32KB

Nota:  En la imagen se muestra cuatro bloques dentro del CU, sin embargo, esto es posible que cambie, ya que un CU puede tener menos o más bloques dentro de él.

Características de "Exadata Hybrid Columnar Compression (EHCC)"

  • Las unidades de compresión (CU), siempre son más grandes que los bloques de la base de datos.
  • Con las unidades de compresión (CU), los datos son  organizados por columnas, no por filas.
  • Cada fila es auto contenida en una unidad de compresión (CU).
  • Las estructuras lógicas abarcan múltiples bloques de base de datos.
  • Cada columna es comprimida separadamente.
  • Si se realiza una modificación a una fila, la unidad de compresión (CU) en la que se encuentra dicha fila es bloqueada en su totalidad.
  • El beneficio en espacio al utilizar "Hybrid Columnar Compression" puede ser hasta 15 veces menos.
  • En algunos estudios se ha logrado un beneficio en espacio hasta de 24 veces menos.
  • La descompresión de los datos es realizada por los "Exadata Storage Server".
  • Es posible utilizar diferentes formas de compresión en una misma tabla, si y solo si, la tabla está particionada.
  • Algunas veces es necesario volver a comprimir la tabla después de algunas actualizaciones, según la nota de metalink No. 1332853.1.
  • "Exadata Hybrid Columnar Compression" completa grandes niveles de compresión de datos que son insertados de manera directa.
  • No es recomendado para tablas que son modificadas con mucha frecuencia.
  • No es permitido en tablas organizadas por índices (IOT)

"Exadata Hybrid Columnar Compression" soporta:

  • Índices tipo B-Tree, Bitmap y texto.
  • Vistas Materializadas
  • Operaciones utilizadas por "Smart Scan"
  • Particionamiento
  • "Parallel Query", PDML, PDDL
  • "Physical Standby" con "Data Guard"
  • Modificaciones de esquemas, Online, Metadata-Only, Agregar o eliminar Columnas.

"Exadata Hybrid Columnar Compression (EHCC)" está soportado en las siguientes soluciones:

  • Oracle Exadata
  • Oracle Exadata Expansion Rack
  • Pillar Axiom
  • ZFS Storage Appliance
  • Super Cluster

Beneficios de "Exadata Hybrid Columnar Compression":

  • Almacenamiento
  • Baja transferencia de datos desde los discos
  • Soportado por Flash Cache
  • Soportado por DRAM Cache
  • Ambientes de pruebas, Ambientes de desarrollos ambientes de recuperación a desastres

Estimación de la Compresión:

Existe un nuevo Consejero para compresión en la versión 11gR2 de una base de datos Oracle:

DBMS_COMPRESSION

El consejero reunirá información relacionada con la compresión de los datos, esto incluye estimaciones del nivel de compresión para una determinada tabla, tanto para tablas particionadas como tablas no particionadas. Esto ayudará al administrador a tomar mejores decisiones de compresión para sus objetos, basándose en la información proporcionada por el consejero.

Nota: Antes de ejecutar el consejero de compresión cree otro "Tablespace"  en la base de datos ya que dicho proceso crea tablas temporales y realizará significantes lecturas y escrituras. Se recomienda ejecutar el consejero de compresión en periodos de tiempo en que no hay demasiada carga de trabajo del negocio.

Ejemplo de "Exadata Hybrid Columnar Compression"

A continuación se realizará un ejemplo paso a paso sobre  compresión y descompresión de objetos dentro de una base de datos utilizando "Exadata Hybrid Columnar Compression". El ambiente utilizado para realizar el ejemplo es el siguiente:

Base de Datos: Oracle Enterprise Edition 11gR2 (11.2.0.3.0) Tipo de Exadata: Oracle Exadata Quarter Rack Sistema Operativo: Oracle Linux 5.5 x86-64

Identificar la tabla a comprimir:

SELECT segment_name,sum(bytes)/1024/1024 Size_MB
FROM user_segments
WHERE segment_name in ('EHCC_NOCOMPRESS')
GROUP BY segment_name;

SEGMENT_NAME                     Size_MB
------------------------------------------------------------
EHCC_NOCOMPRESS                                    25487.0625

Creación de la tabla utilizando compresión tipo "QUERY" y nivel alto:

SQL> CREATE TABLE EHCC_QUERY COMPRESS FOR QUERY HIGH AS SELECT * FROM EHCC_NOCOMPRESS;
Table created.

Creación de la tabla utilizando compresión tipo "ARCHIVE" y nivel alto:

SQL> CREATE TABLE EHCC_ARCHIVE COMPRESS FOR ARCHIVE HIGH AS SELECT * FROM EHCC_NOCOMPRESS;
Table created.

    

Verificar resultados:

SQL> SELECT segment_name,sum(bytes)/1024/1024 Size_MB
FROM user_segments
WHERE segment_name in ('EHCC_QUERY','EHCC_ARCHIVE')
GROUP BY segment_name;

SEGMENT_NAME                            Size_MB
------------------------------------------------------------
EHCC_ARCHIVE                                           848
EHCC_QUERY                                          1280

Comparación entre EHCC y no-EHCC:

SQL>select table_name,compression,compress_for
from user_tables
where table_name in  ('EHCC_ARCHIVE', 'EHCC_QUERY', 'EHCC_NOCOMPRESS');

TABLE_NAME			COMPRESS        COMPRESS_FOR
------------     ---------------    -------------------------
EHCC_ARCHIVE			ENABLED		ARCHIVE HIGH
EHCC_QUERY			ENABLED		QUERY HIGH
EHCC_NOCOMPRESS		DISABLED

Descomprimir una tabla:

SQL> ALTER TABLE EHCC_QUERY MOVE NOCOMPRESS PARALLEL;
Table altered.

SQL> ALTER TABLE EHCC_ARCHIVE MOVE NOCOMPRESS PARALLEL;
Table altered.

Comprobando resultados de descompresión:

SQL> SELECT segment_name,sum(bytes)/1024/1024 Size_MB
FROM user_segments
WHERE segment_name in ('EHCC_QUERY','EHCC_ARCHIVE')
GROUP BY segment_name;

SEGMENT_NAME                           Size_MB
------------------------------------------------------------
EHCC_ARCHIVE                                         22947
EHCC_QUERY                                         22942

Verificar que el número de registros dentro de las tablas no se hayan alterado:

SQL>SELECT COUNT(*) FROM EHCC_NOCOMPRESS;

  COUNT(*)
 ----------------
 102938023


SQL> SELECT COUNT(*) FROM EHCC_QUERY;

  COUNT(*)
----------------
  102938023

SQL> SELECT COUNT(*) FROM EHCC_ARCHIVE;

  COUNT(*)
----------------
  102938023

Resultados

Compresión:

Método de Compresión

Nombre de Tabla

Tamaño (MB)

Tiempo de creación (HH:MM:SI)

Sin Compresión

EHCC_NOCOMRESS

25487.0625

 

Query High

EHCC_QUERY

1280

00:10:45.01

Archive High

EHCC_ARCHIVE

848

00:40:32.26

Descompresión:

Nombre de Tabla

Tamaño (MB)

Tiempo de descompresión (HH:MM:SI)

EHCC_QUERY

22942

00:03:08.42

EHCC_ARCHIVE

22947

00:02:57.58

 


Deiby Gómez es un DBA, con experiencia en administración de dominios “WebLogic” e implementaciones de Arquitecturas Orientadas a Servicios (SOA). De forma frecuente es conferencista en diversos eventos Oracle en Guatemala, entre ellos OTN LAD Tour 2013 y otros. Ha brindado consultoría en implementaciones de SOA y Bases de datos en diversas empresas de su país de residencia ( Guatemala ), actualmente es Consultor en Datum S.A. de Guatemala. Deiby es OCP11g, Exadata Database Machine X3 Administrator y Oracle SOA Implementation Certified Expert.

Yenugula Venkata RaviKumar es un DBA con más de 13 años de experiencia, especializado en ambientes de Alta Disponibilidad de Bases de Datos (RAC, Data Guard, entre otras), afinación del rendimiento para Bases de Datos, Migraciones y Respaldos, Oracle Exadata v1/v2/v3, experto en Sistemas operativos como AIX, HP-UX y Linux . Ha participado como conferencista en varios eventos Oracle en la India donde actualmente reside. Obtuvo el título de OCM10g en el año 2009.