Uso de la base de datos en memoria con Autonomous Database

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

Acerca de la base de datos en memoria

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

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

  • Las consultas de la base de datos pasan la mayor parte de su tiempo de ejecución explorando y filtrando datos, así como realizando 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 In-Memory reside en el área In-Memory, que es una parte opcional del área global del sistema (SGA). Cuando se activa para In-Memory, las tablas, las particiones, las subparticiones y las vistas materializadas se rellenan en formato columnar 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 de forma dinámica a lo largo del tiempo para alojar los objetos INMEMORY más activos. Puede utilizar la cláusula table PRIORITY o realizar exploraciones de tablas continuas para garantizar que el almacén de columnas en memoria crezca lo suficientemente grande para la carga de trabajo. Consulte Cambio de Tamaño del Almacén de Columnas en Memoria para obtener más información.

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

  • Particiones o subparticiones

  • Vistas Materializadas

Consulte Enabling Objects for In-Memory Population 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 informático ECPU

    • Un mínimo de 16 ECPU

  • Si reinicia la base de datos, los objetos activados para INMEMORY necesitan volver a rellenarse en el almacén de columnas en memoria. En función de la configuración de prioridad, la repoblación se puede producir automáticamente o en el primer acceso. Si está supervisando 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 son elegibles para rellenarlos 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 aptos para rellenarlos 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 rellenar 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 rellenar 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 después de 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 solo 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 se excluye la columna depno.

Consulte INMEMORY_TABLE_CLAUSE.

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.

Después de rellenar el objeto 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 How In-Memory Population Works para obtener más información.

Notas para activar objetos para el 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 continuas de tablas para garantizar que el almacén de columnas en memoria crezca automáticamente lo suficientemente grande para la carga de trabajo. Si un objeto se rellena parcialmente, la exploración de tabla puede utilizar la exploración inteligente en memoria y de Exadata.

Ajuste de Tamaño del Almacenamiento 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 en memoria no está reservada por adelantado y el tamaño inicial del área en memoria es 0. El Área In-Memory crece gradualmente cada vez que hay espacio insuficiente para la población In-Memory.

Los objetos del almacén de columnas en memoria se gestionan de forma dinámica mediante la función Automatic In-Memory (AIM). Automatic In-Memory está activado 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 In-Memory 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 In-Memory, el almacén de columnas In-Memory expulsa segmentos inactivos.

Para garantizar 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 Automating Management of In-Memory Objects para obtener más información.

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

  • Mediante el procedimiento DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE para modificar el tamaño máximo en memoria. Puede especificar un valor en el rango entre 0 y 70. Al especificar un valor de 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 procedimiento SET_SGA_PERCENTAGE para obtener más información.

Consulte la vista V$INMEMORY_AREA para recuperar la información sobre la asignación de espacio dentro del á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 Autonomous Database modificando el tamaño máximo en memoria 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 en memoria a cero (0) y se desactiva Database In-Memory para la instancia.

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