Uso de Database In-Memory con Autonomous Database

La función Database In-Memory disponible en Autonomous Database puede mejorar significativamente el rendimiento de los análisis en tiempo real y las cargas de trabajo mixtas.

Acerca de Database In-Memory

Oracle Database In-Memory (Database In-Memory) es un conjunto de funciones que mejora considerablemente el rendimiento de los análisis en tiempo real y las cargas de trabajo mixtas.

La función Database In-Memory es útil cuando:
  • Ha activado la función en memoria para su base de datos local y ahora está migrando desde la base de datos local a Autonomous Database.

  • Las consultas de la base de datos dedican la mayor parte de su tiempo de ejecución a explorar y filtrar datos, así como a realizar uniones y agregaciones agrupadas.

  • Debe mejorar el tiempo de respuesta de las consultas que son de naturaleza analítica.

El almacén de columnas en memoria es la función clave de Database In-Memory. El almacén de columnas en memoria reside en el área en memoria, que es una parte opcional del área global del sistema (SGA). Cuando se activa para In-Memory, las tablas, particiones, subparticiones y vistas materializadas se rellenan en formato de columna en el almacén de columnas In-Memory. Este formato columnar está optimizado para exploraciones muy rápidas, lo que puede permitir que las consultas analíticas ejecuten órdenes de magnitud más rápido que las consultas basadas en formato de fila. Consulte Oracle Database In-Memory para obtener más información.

El almacén de columnas en memoria crece dinámicamente a lo largo del tiempo para alojar los objetos INMEMORY más activos. Puede utilizar la cláusula de tabla PRIORITY o realizar exploraciones de tablas continuas para asegurarse de que el almacén de columnas en memoria crece lo suficiente como para la carga de trabajo. Consulte Tamaño del Almacén de Columnas en Memoria para obtener más información.

Puede utilizar la cláusula INMEMORY en las sentencias DDL para activar la memoria para los siguientes objetos:
  • Tablas (incluidas las tablas externas)

  • Particiones o Subparticiones

  • Vistas materializadas

Consulte Activación de objetos para relleno en memoria para obtener más información.

Tenga en cuenta lo siguiente para activar Database In-Memory:

  • Database In-Memory solo está disponible para una instancia de Autonomous Database con:

    • El modelo de cálculo de ECPU

    • Un mínimo de 16 ECPU

  • Si reinicia la base de datos, los objetos activados para INMEMORY necesitan que se vuelvan a rellenar en el almacén de columnas en memoria. Según la configuración de prioridad, es posible que se vuelva a completar automáticamente o en el primer acceso. Si supervisa el rendimiento, observará un rendimiento más lento hasta que se vuelva a rellenar el objeto.

Activación de Objetos para el Relleno en Memoria

Puede activar y desactivar objetos para rellenar en el almacén de columnas en memoria.

Solo los objetos con la cláusula INMEMORY se pueden rellenar en el almacén de columnas en memoria. Utilice las sentencias DDL CREATE TABLE o ALTER TABLE para aplicar la cláusula INMEMORY.

Por defecto, los objetos se crean con el atributo NO INMEMORY, lo que significa que no son elegibles para rellenar en el almacén de columnas en memoria.

La activación de un objeto como INMEMORY especifica que un objeto puede residir potencialmente en el almacén de columnas en memoria. El relleno en memoria es un paso independiente que se produce cuando la base de datos lee datos de formato de fila existentes, los transforma en formato de columna y, a continuación, los almacena en el almacén de columnas en memoria. Por defecto, todas las columnas de un objeto con el atributo INMEMORY se rellenan en el almacén de columnas en memoria.

La definición del atributo INMEMORY en un objeto implica que el objeto es un candidato para el relleno en el almacén de columnas en memoria. El objeto no se rellena inmediatamente en el almacén de columnas en memoria. Sin embargo, puede utilizar la cláusula PRIORITY con el atributo INMEMORY para controlar la prioridad de relleno en el almacén de columnas en memoria. La cláusula PRIORITY se puede especificar con los siguientes valores:

  • CRITICAL: el objeto se rellena inmediatamente después de abrir la base de datos.

  • HIGH : el objeto se rellena después de que se hayan rellenado todos los objetos CRITICAL, si el espacio permanece disponible en el almacén de columnas en memoria.

  • MEDIUM: el objeto se rellena después de que se hayan rellenado todos los objetos CRITICAL y HIGH, y el espacio permanece disponible en el almacén de columnas en memoria.

  • LOW: el objeto se rellena después de que se hayan rellenado todos los objetos CRITICAL, HIGH y MEDIUM, si el espacio permanece disponible en el almacén de columnas en memoria.

  • NONE: los objetos solo se rellenan una vez que se exploran por primera vez, si hay espacio disponible en el almacén de columnas en memoria. La prioridad NONE es la prioridad predeterminada.

Ejemplo para crear una tabla con el atributo INMEMORY:

CREATE TABLE im_emp (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY;
En este ejemplo se crea la tabla im_emp con el atributo INMEMORY. En el ejemplo se utiliza la prioridad por defecto de NONE para la cláusula INMEMORY, lo que significa que la tabla se rellena sólo después de que se explora por primera vez.

Ejemplo para utilizar la cláusula PRIORITY con el atributo INMEMORY:

CREATE TABLE im_emp_1 (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY PRIORITY CRITICAL;

Ejemplo para definir el atributo INMEMORY para una tabla existente:

ALTER TABLE employees INMEMORY;

En este ejemplo se define el atributo INMEMORY para la tabla employees.

También puede modificar una tabla para definir el atributo INMEMORY solo para un subjuego de columnas de la tabla. Por ejemplo:

ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);
En este ejemplo, se define el atributo INMEMORY para im_emp_tb, pero excluye la columna depno.

Consulte INMEMORY_TABLE_CLAUSE para obtener más información.

Después de activar INMEMORY para una tabla, puede consultar la vista V$IM_SEGMENTS para determinar si los datos de la tabla se rellenan en el almacén de columnas en memoria. Por ejemplo:
SELECT SEGMENT_NAME, POPULATE_STATUS 
FROM   V$IM_SEGMENTS 
WHERE  SEGMENT_NAME = 'IM_EMP';

Consulte V$IM_SEGMENTS para obtener más información.

Una vez que el objeto se rellena en el almacén de columnas en memoria, el objeto solo se expulsa cuando se borra o mueve el objeto o se actualiza con el atributo NO INMEMORY. Por ejemplo:
ALTER TABLE im_emp NO INMEMORY;

Consulte Cómo Funciona el Relleno de Memoria para obtener más información.

Notas para activar objetos para relleno en memoria:

  • La base de datos no rellena automáticamente los objetos en memoria con el valor PRIORITY de NONE. Sin embargo, puede rellenar manualmente estos objetos en el almacén de columnas en memoria. Consulte Relleno manual del almacén de columnas de IM y Procedimiento DBMS_INMEMORY.POPULATE para obtener más información.

  • Debe haber exploraciones de tablas continuas para garantizar que el almacén de columnas en memoria crezca automáticamente lo suficientemente grande como para la carga de trabajo. Si un objeto se rellena parcialmente, la exploración de tabla puede utilizar In-Memory y Exadata Smart Scan.

Tamaño del Almacén de Columnas en Memoria

Cuando la instancia de Autonomous Database tiene 16 o más ECPU, la función Database In-Memory está activada por defecto y In-Memory puede utilizar hasta el 50% de la SGA.

La memoria para el área de memoria no está reservada por adelantado y el tamaño inicial del área de memoria es 0. El área en memoria crece gradualmente cada vez que no hay espacio suficiente para la población en memoria.

Los objetos del almacén de columnas In-Memory se gestionan dinámicamente mediante Automatic In-Memory (AIM). La función Automático en memoria está activada por defecto para Autonomous Database.

AIM utiliza estadísticas internas para determinar la frecuencia con la que se accede a los objetos y columnas en memoria. Si el almacén de columnas en memoria está lleno y otros segmentos a los que se accede con más frecuencia se beneficiarían del relleno en el almacén de columnas en memoria, el almacén de columnas en memoria expulsa los segmentos inactivos.

Para asegurarse de que el juego de datos de trabajo siempre se rellena, AIM expulsa automáticamente los segmentos inactivos (a los que se accede con poca frecuencia). Consulte Automatización de la gestión de objetos en memoria para obtener más información.

El tamaño máximo por defecto de In-Memory para Autonomous Database puede ser hasta el 50% del tamaño de SGA. Sin embargo, puede modificar el tamaño máximo de In-Memory para Autonomous Database:
  • Al cambiar el recuento de ECPU para su instancia de Autonomous Database.

  • Mediante el procedimiento DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE para modificar el tamaño máximo de memoria. Puede especificar un valor en el rango entre 0 y 70. Al especificar un valor cero (0), se desactiva Database In-Memory. Por ejemplo:
    BEGIN
        DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
    END;
    /
    En este ejemplo, se modifica el tamaño máximo de In-Memory al 60% del tamaño de SGA.

Consulte SET_SGA_PERCENTAGE Procedure para obtener más información.

Consulte la vista V$INMEMORY_AREA para recuperar la información sobre la asignación de espacio en el área en memoria. Por ejemplo:

SELECT * FROM V$INMEMORY_AREA;
Consulte V$INMEMORY_AREA para obtener más información.

Desactivación del Almacén de Columnas en Memoria

Puede desactivar el almacén de columnas en memoria para su instancia de Autonomous Database modificando el tamaño máximo de In-Memory a 0.

Por ejemplo:

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

En este ejemplo, se modifica el valor de tamaño máximo de In-Memory a cero (0) y se desactiva Database In-Memory para la instancia.

Consulte SET_SGA_PERCENTAGE Procedure para obtener más información.