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:
Existen dos tipos de "Exadata Hybrid Columnar Compression":
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:
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.
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.
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
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
SQL> CREATE TABLE EHCC_QUERY COMPRESS FOR QUERY HIGH AS SELECT * FROM EHCC_NOCOMPRESS; Table created.
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
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
SQL> ALTER TABLE EHCC_QUERY MOVE NOCOMPRESS PARALLEL; Table altered. SQL> ALTER TABLE EHCC_ARCHIVE MOVE NOCOMPRESS PARALLEL; Table altered.
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
SQL>SELECT COUNT(*) FROM EHCC_NOCOMPRESS; COUNT(*) ---------------- 102938023 SQL> SELECT COUNT(*) FROM EHCC_QUERY; COUNT(*) ---------------- 102938023 SQL> SELECT COUNT(*) FROM EHCC_ARCHIVE; COUNT(*) ---------------- 102938023
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.