Por Kai Yu , Joel Perez
& Sebastián D'Alessandro (OCE)
Publicado en Agosto 2015
Continuamos con este artículo proveniente de la introducción sobre esta optimización con la nueva opción de Oracle 12c denominada In-Memory Database, puede leerla aquí:
Oracle OBIEE con opción Oracle 12c In-Memory Database
Como plataforma de “Business Intelligence” y “Analytics”, Oracle OBIEE Server se conecta a una base de datos física la cual puede ser una “Oracle Database” a través de ODBC/JDBC , presentando un esquema de vista lógica independiente de la base de datos física. Cuando un usuario ejecuta los reportes, el OBIEE server traduce o mapea los SQL lógicos desde la capa de presentación del reporte a consultas físicas SQL, enviando estos SQL a la base de datos, de esta manera Oracle database ejecuta las consultas SQL físicas, obteniendo los datos correspondientes y retornándolos al OBIEE server para armar el reporte. La herramienta de administración de Oracle BI muestra estas tres capas: Presentación(Presentation), Modelo de negocio y mapeo ( Business Model and Mapping), y Física (Physical).
Figura 3: Herramienta de Administración de Oracle BI
Nosotros estamos usando el siguiente ejemplo para discutir cómo usar la opción Oracle In-Memory puede acelerar reportes de Oracle BI.
Por lo general, el procesamiento de BI analytics demanda una gran cantidad de datos a la base de datos. En el nivel físico de BI report, es posible que se puedan ver muchos “full table scan”a tablas muy grandes y complejas operaciones de unión sobre estas inmensas tablas. Principalmente las operaciones de E/S para estos grandes “full table scan” ocupan una gran parte del tiempo de la ejecución de los reportes. Una reducción de estas operaciones de E/S puede mejorar significativamente el rendimiento de los informes. Con la opción de Oracle In-Memory, podemos cargar de manera parcial o en su totalidad esas tablas sobre las cuales se realiza “full table scan”en Oracle In-Memory Store. Con estas tablas en la memoria de base de datos, podemos reducir significativamente el tiempo físico de la consulta SQL.
Partiendo de estas ideas, podemos aplicar el siguiente proceso:
En el resto del artículo utilizaremos un ejemplo para poder recorrer este proceso:
1- Identificar la capa física de SQL correspondiente al reporte:
Con un reporte particular para ajustar su rendimiento, podemos echar un vistazo al mapeo desde el reporte a la capa física. Por ejemplo tomamos un reporte llamado EDI Queue el cual demora más de 9 minutos y medio en correr. Nos gustaría acortar el tiempo de ejecución del mismo con la funcionalidad objeto de este articulo “Oracle In-Memory”.
Por medio de la capa de presentación encontrar el “Business Model” y “mapping” de “Fact EDI QUEUE”, hemos identificado la vista física de base de datos FACT_EDI_QUEUE_V, la cual representa el “SQL Statement” para este reporte tal como lo podemos ver abajo:
Figura 4: Las tres capas y su mapeo
Revisando la definición de la vista física FACT_EDI_QUEUE_V, encontramos cuatro tablas físicas grandes en base a las cuales la vista está construida: EDAPIHDR_BASE , EDAPIQ_BASE , EDAPIQ_BASE VEN_LOC_BASE. A través de la vista, la consulta SQL asociada a ésta,produce operaciones de “full table scan” sobre estas cuatro tablas. Decidimos entonces colocar las mismas dentro del “Oracle Database In-Memory area”.
Para cargar en el área In-Memory esas 4 tablas ejecutamos las siguientes sentencias:
SQL> alter table APD_BASE.EDAPILIN_BASE inmemory priority high; SQL> alter table APD_BASE.EDAPIQ_BASE inmemory priority high; SQL> alter table APD_BASE.EDAPIHDR_BASE inmemory priority high; SQL> alter table APD_BASE.VEN_LOC_BASE inmemory priority high;
Podemos confirmar que esas tablas efectivamente están cargadas en el área de “In-Memory Column”:
SQL> select segment name, inmemory_size from v$im_segments; SEGMENT_NAME INMEMORY_SIZE ----------------------------------------------------------- VEN_LOC_BASE 1279648 EDAPIQ_BASE 291168512 EDAPIHDR_BASE 961496576 VEN_LOC_BASE 1279648 EDAPILIN_BASE 930710528 VEN_LOC_BASE 1279648
Comparemos el plan de ejecución de la vista antes de cargar las tablas en el área de In-Memory Column:
Este es el plan de ejecución para la consulta antes de usar In-Memory Column área:
Después de cargar las tablas en In-Memory store, se generó un nuevo plan de ejecución para esta vista:
Podemos ver que los “Full table scans” sobre estas cuatro tablas fueron reemplazados por “TABLE ACCESS INMEMORY FULL”, lo cual indica que la consulta lee los datos desde el “IN-Memory column store”.
Como resultado del cambio en el plan de la consulta, el tiempo de ejecución de la misma se redujo de 4 a 2 minutos aproximadamente, como podemos visualizar acá:
No In-Memory
In-Memory
Utilización de In-Memory Advisor
“Oracle In-Memory Advisor” fue diseñado para ayudar a responder la pregunta: ¿Cuales tablas y/o particiones deberían ser marcadas para ser “subidas” a “In-Memory column Store”?. Esta es una nueva funcionalidad de Oracle, licenciada como parte del Database Tuning Pack. Ver MOS (My Oracle Support) note: 1965343.1 para más detalles sobre Oracle In-Memory Advisor.
Se encuentran en disponibilidad dos “White papers” que recomendamos leer: Oracle Database In-Memory Advisor de octubre de 2014 y Oracle Database In-Memory Advisor Best practices publicado en Febrero 2015.
http://www.oracle.com/technetwork/database/in-memory/overview/twp-oracle-database-in-memory-2245633.html
http://www.oracle.com/technetwork/database/manageability/info/twp-in-memory-advisor-bp-2430474.pdf
“In-Memory Advisor” estima factores de mejora de rendimiento para procesamiento de “Analytics” basándose en lo siguiente:
Proceso para el uso de In-Memory Advisor
Paso 1: Descargar el asesor de In-Memory según las instrucciones en la nota de MOS: 1965343.1
Paso 2: Identificar el SQL físico correspondiente al reporte por medio del mapeo desde la capa de presentación a la capa física.
Paso 3: A través del SQL físico identificar las operaciones de “Full table scan”subyacentes.
El resto de este artículo utiliza el reporte de EDI Queue como ejemplo de uso de este proceso.
SQL> @instimadv.sql
Necesita especificar los usuarios que utilizaran esta herramienta para realizar tuning:
‘Por favor ingrese una lista separada con coma de usuarios de base de datos a los que se le desea conceder el privilegio de EXECUTE sobre el paquete DBMS_INMEMORY_ADVISOR, por ejemplo al usuario APD_STAR.
Usted podrá realizar posteriormente GRANT EXECUTE ON DBMS_INMEMORY_ADVISOR a usuarios adicionales si así es necesario.’
SQL> @imadvisor_analyze_and_report Specify the IM task name The IM Advisor generates a report as imadvisor_<taskname>.html file in the current working directory The sql file is generated as imadvisor_sql_<taskname>.sql Enter value for im_task_name: test IM Task name Specified: test Enter begin time for report: … Enter value for begin_time: -1:30 Report begin time specified: -1:30 … Enter duration in minutes starting from begin time: Defaults to SYSDATE - begin_time Enter value for duration: 60 Report duration specified: 60 Using 2015-MAR-13 09:33:13.000000000 as report begin time Using 2015-MAR-13 10:33:13.000000000 as report end time IM Advisor: Adding Statistics..
Del proceso finalmente se derivaran los cambios a realizar en scripts lo cual podrá ser aplicado por usted cuando asi lo considere conveniente.
Estimados lectores, esperamos que este artículo pueda ser de utilidad para sus implementaciones, técnicas y para investigación en general. Hasta el próximo artículo.
Saludos!
Kai Yu es un arquitecto y líder de los laboratorios de soluciones de Ingeniera Oracle de la afamada compañía "Dell", desde el año 2006. Parte del rol de Kai es prestar ayuda constantemente a los clientes en procesos y proyectos de implantación. La pericia profesional de Kai esta basada en soluciones Oracle tales como: Oracle RAC, Oracle Grid, Oracle E-Business Suite y Oracle VM. Kai fue un "Senior Oracle DBA" y "Oracle Applications DBA" para "Dell IT" y otras compañías en anos comprendidos del 1995 al 2006. Kai ha publicado mas de 10 "White-papers" e impartido presentaciones técnicas en el altamente reconocido evento Oracle "Oracle Open World" desde el ano 2006 a la fecha y en "Collaborate" desde el 2008 a la fecha, asi como también numerosos "Webcasts". Kai es presidente del "IOUG Oracle RAC SIG", parte del comité del "IOUG Collaborate 09 conference" y líder del "IOUG Oracle RAC Tuning BootCamp 2010".
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. Perfil OCM Joel Pérez: http://education.oracle.com/education/otn/JoelPerez.htm
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.