Oracle Database 12c: In-Memory (Parte I)

Por Joel Perez , Mahir M. Quluzade (OCE) & Sebastián D'Alessandro (OCE)
Publicado en Julio 2015

“Oracle Database In-Memory” es una nueva y poderosa funcionalidad del manejador de base de datos que fue incluida en la versión 12 Realease 1 (12.1.0.2), liberada en julio del 2014.Esta serie de artículos estarán basados sobre esta interesante posibilidad que nos pone a disposición “Oracle Database”.

Introducción
El tema relacionado con “Oracle Database 12c In-Memory” definitivamente ha de marcar un antes y un después en la forma en como los sistemas y/o bases de datos de tipo “OLTP” & “DWH” pueden combinarse basados en una base de datos Oracle. Hasta la fecha los sistemas de procesamiento común cuenta con una o muchas base(s) de datos con procesamiento de tipo “OLTP” y una o muchas base(s) de datos de tipo “DWH” para llevar a cabo análisis de inteligencia de negocio. Normalmente esto conduce a que los clientes adquieran en la mayoría de los casos distintas infraestructuras de “Hardware” ( Base de datos.. Servidores.. etc.. ) para mantener la operación de ambos. De  forma común los clientes diseñan, implantan soluciones y procesos para alimentar las bases de datos de tipo “DWH” con la data generada por los sistemas “OLTP”. Desde hace unas cuantas décadas siempre se ha realizado de la misma manera en la mayoría de oportunidades.
Ahora que tal si hablamos de:

  • Combinar ambos productos y/o funcionalidades en una misma base de datos.. eliminando de forma parcial o total procesos de: extracción, transporte, transformación y análisis..
  • Poseer un DWH que pueda correr en tiempo real..
  • Menor integración, esfuerzo de administración..
  • Nuevos posibles tipos de aplicaciones de apoyo de decisiones en tiempo real..
  • Esto y mucho mas..

“Oracle Database In-Memory” acelera transparente el análisis en órdenes de magnitud, mientras que al mismo tiempo puede acelerar cargas de trabajo mixtas en una base de datos de tipo OLTP. Con “Oracle Database In-Memory”, los usuarios obtienen respuestas inmediatas a preguntas de negocio que previamente tomaban horas.

“Oracle Database In-Memory” ofrece tecnología de vanguardia en materia de rendimiento en memoria sin la necesidad de restringir funcionalidad o aceptar cierta clase de compromisos transaccionales, configuración, complejidad o riesgo. La Implementación de “Oracle Database In-Memory” con cualquier aplicación compatible con bases de datos Oracle es tan fácil como apretar un botón, no se requieren cambios en las aplicaciones. “Oracle Database In-Memory” está totalmente integrado con los conceptos ampliamente conocidos y manejados por el manejador Oracle en su arquitectura tales como:

  • “Scale-up”
  • “Scale-out”
  • Almacenamiento por niveles
  • Disponibilidad
  • & Tecnologías de seguridad

“Oracle Database In-Memory” ofrece la capacidad de realizar fácilmente análisis de data en modo “real-time” en conjunto con procesamiento de transacciones también en tiempo real. Esto representa un concepto de transformación de procesamiento empresarial escalando a un concepto de “Real-Time Enterprises” las cuales podrán procesar decisiones, responder instantáneamente a solicitudes de los clientes y mas en tiempo real..
Todo esto y mas es lo que representa una de las mas novedosas caracterististicas de “Oracle Database 12c” denominada: “Oracle Database12c In-Memory”.

Hablemos técnicamente un poco mas de esta nueva característica.

Bloque de base de datos
El manejador de base de datos Oracle tradicionalmente ha almacenado los datos en formato de fila (“row format”), esto significa: guardados como registros “multi-columna” en los bloques de datos en disco (Figura 1). En una base de datos  “row format”, cada nueva transacción o registro es guardado como una nueva fila en una tabla. El formato de fila, es ideal para bases de datos transaccionales (OLTP)  ya que permite un rápido acceso a todas las columnas de un registro,  dado que todos los datos de un registro específico se mantienen contiguos tanto en la memoria como en el disco, también es marcadamente eficiente para el procesamiento de sentencias DML.
Description: DataBlock.png
Figura 1: Formato interno de un bloque de base de datos y una pieza de fila
Aclaramos que la estructura del bloque de datos no fue modificada en el último release de “Oracle Database”, los cambios se realizaron únicamente en la arquitectura de la memoria lo cual implica solamente impacto a nivel instancia.

Cambios en la Instancia

Una instancia Oracle está compuesta por memoria y procesos de segundo plano “Background processes”. La memoria está dividida principalmente en dos áreas diferentes: “System Global Area (SGA)” and “Program Global Area”. Oracle crea procesos servidor para manejar los requerimientos de los procesos de usuarios conectados a la instancia. Una de las tareas más importantes de estos procesos de servidor (“Server Process”)  es leer bloques de datos de los objetos desde los datafiles en disco y cargarlos en el  buffer chache. Por defecto Oracle almacena los datos en el “database buffer cache”  en formato fila (“row format”). A partir de Oracle Database 12c Release 1 (12.1.0.2) se agregó un nuevo pool estático en la SGA  llamado área de “In-Memory”  de esta manera los objetos son almacenados en un nuevo formato denominado “In-Memory Column Store (IM column store)” en esta mencionada área de memoria. IM Column es un opcional que almacena copias de tablas, particiones, columnas de tablas, vistas materializadas (objetos especificados como “In-memory” utilizando DDL) en un nuevo formato columnar  optimizado para escaneos rápidos.
La base de datos utiliza técnicas especiales, incluyendo procesamiento de instrucciones de vector SIMD (utilizado para procesar varios valores en cada instrucción) para escanear datos columnares rápidamente. “IM column store” es un complemento para el “data buffer cache” más que un reemplazo del mismo. De hecho ambas áreas de memoria pueden almacenar los mismos datos en diferentes formatos (Figura 2) y no es requerido que los objetos que son cargados en el “IM column store” sean también cargados en el “database buffer cache”, es decir, los objetos pueden ser subidos a memoria únicamente en “IM column store”.
Description: Figure 2 -MemoryDualFormat.png
Figura 2: Formato dual de almacenamiento en memoria

Optimizaciones Integrales de Memoria
“Oracle Database In-Memory” implementa algoritmos “state-of-the-art” para:

  • “Memory scans”
  • “In-memory joins”
  • “In-memory aggregation”

Las consultas analíticas normalmente hacen referencia a sólo un pequeño número de las columnas en una tabla. “Oracle Database In-Memory” minimiza el trabajo y maximiza el rendimiento mediante el acceso a sólo aquellas columnas necesarias por una consulta mediante el procesamiento de estas columnas directamente sin tener que descomprimirlas primero.
Las tablas están divididas lógicamente en secciones. Valores mínimos y máximos de cada columna son mantenidos para cada sección de la tabla. Esto permite a las consultas saltar/obviar aquellas secciones que contienen datos fuera del rango de los valores requeridos por la consulta.
Es frecuente encontrarse con tipos de columnas que poseen muchos valores repetidos. Por ejemplo, una columna de almacenamiento de la región geográfica de cada transacción de venta tendrá muchas repeticiones de las mismas regiones. “Oracle Database In-Memory” comprime estos valores repetidos para ahorrar memoria y optimiza el procesamiento mediante la ejecución de consulta de predicados sólo una vez por cada valor de columna única (por ejemplo, una vez por región única).
Microprocesadores modernos soportan “SIMD (Single Instruction for Multiple Data values) instrucciones de procesamiento vectorial para acelerar los gráficos y computación científica. “Oracle Database In-Memory” puede utilizar estas instrucciones vectoriales SIMD para procesar múltiples valores de columna en un solo ciclo de reloj del CPU.
“In-Memory table joins” aprovecha el nuevo formato de la columna convirtiendo condiciones de “Join” en filtros aplicados durante “scans” de datos de alta velocidad.
“In-Memory aggregation algorithms” se apalanca en el formato de la columna para acelerar consultas analíticas y reportes que manejan grandes cantidades de datos.
En conjunto, estas optimizaciones permiten a “Oracle Database In-Memory” ejecutar consultas a la tasa asombrosa de miles de millones de filas por segundo para cada núcleo de  CPU. “Analytics” que antes tardaban horas o días para ejecutar ahora se completa en cuestión de segundos, permitiendo tomar decisiones de negocio en tiempo real.
Procesamiento vectorial SIMD escanea miles de millones de valores por segundo tal como se muestra en la figura.


Puede continuar la lectura en nuestro próximo artículo donde abordaremos aspectos técnicos de configuración de “Oracle Database In-Memory”, haciendo click aquí.



Joel Pérez es un experto DBA (Oracle ACE Director, OCM Cloud Admin. & OCM11g) con más de 15 años de experiencia real en el mundo de tecnología Oracle, especializado en diseño e implementación de soluciones de: Cloud, Alta disponibilidad, Recuperación contra desastres, Upgrades, Replicación y toda área relacionada con bases de datos Oracle. Consultor Internacional con trabajos, conferencias y actividades relacionadas en más de 50 países alrededor del mundo. Habitual Orador en eventos Oracle alrededor del mundo como: OTN LAD, OTN MENA, OTN APAC y más. Joel se ha caracterizado siempre por ser un pionero en materia de tecnología Oracle desde los inicios de su carrera siendo el primer latinoamericano en ser nombrado "OTN Expert" en el año 2003, uno de los primeros Oracle ACE en el programa ACE en el año 2004, unos de los primeros OCP Cloud en el mercado global en el año 2013 y como uno de los mayores logros de su carrera, recientemente en el 2014 fue honorificado como uno de los primeros "OCM Database Cloud Administrator" del mundo. En la actualidad Joel Pérez esta radicado en el continente de Asia con base en Beijing, China llevando a cabo operaciones profesionales como “Chief Technologist & MAA, HA Arquitect” para Yunhe Enmo (Beijing) Technology Co. Ltd.
http://education.oracle.com/education/otn/JoelPerez.htm 

Mahir M. Quluzade es un Senior DBA con mas de 10 anos de experiencia en bases de datos Oracle con especial foco en "High Availability" & "Disaster Recovery Solutions (RAC, Data Guard, RMAN,…)". Mahir actualmente trabaja en el "Central Bank of the Republic of Azerbaijan". El es OCP DBA. Mahir es frecuente orador en el "Azerbaijan Oracle User Group (AZEROUG)".

Sebastián D'Alessandro es un Senior DBA con más de 12 años de experiencia en tecnología Oracle, focalizado principalmente en seguridad de base de datos, soluciones de alta disponibilidad, disaster recovery y virtualización. Actualmente desarrolla su actividad como consultor e instructor de manera independiente.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.