Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products

Cómo puedo configurar la opción Oracle Database 12c In-Memory

Summary: Nuestro objetivo es ofrecer soluciones que simplifiquen la TI mediante soluciones de bases de datos, el desarrollo personalizado, centros de datos dinámicos y computación flexible

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

Se aplica a: 
Base de datos de Oracle: 12.1.0.2

Autor:

Puntaje Reddy M



Introducción: con la introducción de Oracle Database 12c In-Memory, una sola base de datos ahora puede admitir de manera eficiente las cargas de trabajo mixtas, lo que ofrece un rendimiento óptimo para las transacciones y, al mismo tiempo, admite análisis y generación de informes en tiempo real. In-Memory permite que los datamarts y los almacenes de datos brinden un análisis más personalizado, lo cual brinda a los usuarios finales la capacidad de realizar múltiples consultas de conducción empresarial en el mismo tiempo que actualmente se tarda en ejecutar solo una. Esta función le permite almacenar columnas, tablas, particiones y vistas materializadas en la memoria en un formato de columna, en lugar del formato típico de fila. El almacén de columnas en memoria (almacén de columnas IM) fue la característica principal del conjunto de parches 12.1.0.2.

Arquitectura en memoria de Oracle Database 12c:

Tradicionalmente, los datos se almacenan solo en formato ROW, donde como base de datos en memoria almacenan datos solo en formato columna. Por lo tanto, Oracle Database 12C es compatible con la arquitectura de formato doble.
  1. Cada vez que se solicitan datos para operaciones de lectura/escritura (manipulación de datos), se cargan en el almacén de fila tradicional (caché del búfer)
  2. Cada vez que se solicitan datos para operaciones de solo lectura, se completan en un nuevo almacén de columnas en memoria. Claramente, este llenado de datos incluye una transformación del formato de fila al formato de columna.
  3. Siempre que se confirme una transacción que incluya inserciones, actualizaciones o eliminaciones, los datos nuevos aparecerán de forma inmediata y simultánea en el almacén de filas y en el almacén de columnas en memoria. Por lo tanto, ambos almacenes son consistentes a nivel de transacciones
El almacén de columnas en memoria:

La base de datos en la memoria utiliza un almacén de columnas en memoria, que es un nuevo componente del área global del sistema (SGA), denominado área en memoria. Los datos en el almacén de columnas IM no se alojan con el formato de fila tradicional, sino que utilizan un nuevo formato de columna. El almacén de columnas IM no reemplaza la caché del búfer, sino que actúa como un complemento, de modo que los datos ahora se pueden almacenar en la memoria en un formato de fila y columna

El área en memoria es un pool estático dentro del SGA, cuyo tamaño se controla mediante el parámetro de inicialización INMEMORY_SIZE (valor predeterminado 0). El tamaño actual del área en memoria es visible en el almacén de columnas V$SGA

IM subdividida en dos pools:
  1. Bloque de 1 MB: almacena los datos con formato de columna
  2. Bloque de 64 kb: almacena los metadatos acerca de los objetos.
Podemos ver la cantidad de memoria disponible en cada pool mediante la siguiente consulta

SQL> seleccione * de v$inmemory_area;
 
POOL  ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_I
1MB POOL 2.5767E+11 2.3569E+11 DONE 1
64KB POOL 6.4408E+10  876347392 DONE 1
1MB POOL 2.5767E+11 2.3569E+11 DONE 2
64KB POOL  6.4408E+10 876347392 DONE 2
1MB POOL 2.5767E+11 2.3569E+11 DONE 3
64KB POOL 6.4408E+10 876347392 DONE 3
Tabla 1: Memoria disponible en cada pool Habilitar almacén de

columnas IM:como un pool estático, los cambios en

el parámetro INMEMORY_SIZE no surten efecto hasta que se reinicie la instancia de base de datos. Tampoco se ve afectada ni controlada por la administración automática de memoria (AMM). El área en memoria debe tener un tamaño mínimo de 100 MB.

sql> ALTER SYSTEM SET SGA_TARGET=500G SCOPE=SPFILE;
sql> ALTER SYSTEM SET INMEMORY_SIZE=300G SCOPE=SPFILE;
sql>SHUTDOWN INMEDIATO;
sql>STARTUP;

Se inició la instancia de ORACLE.

Área global del sistema total 4.2950E + 11 bytes
Tamaño fijo 7677400 bytes
Tamaño variable 2.0938E + 10 bytes Búferes de base de datos
8.5899E + 10 bytes Búferes de reconstitución 529190912 bytes Área de memoria

3.2212E + 11 bytes
Base de
datos montada. Base de datos abierta.

Podemos ver la configuración en la memoria mediante la siguiente consulta

SQL> SHOW PARAMETER INMEMORY

NAME TYPE VALUE ---------------------------------- ----------- ----- inmemory_clause_default string
inmemory_force string DEFAULT inmemory_max_populate_servers integer


1 inmemory_query string ENABLE

inmemory_size                          biginteger 300G
inmemory_trickle_repopulate_servers_ entero 1
por ciento optimizer_inmemory_aware booleano VERDADERO También podemos establecer inmemory_size parámetro a nivel de


CDB y PDB. Si establece este parámetro a nivel de PDB, no es necesario reiniciar la instancia ni la PDB. La suma de todos los valores de PDB es menor que el valor de CDB.

Podemos habilitar y deshabilitar la opción In-Memory (En la memoria) en el nivel de PDB que se muestra a continuación

Connect to PDB (Conectar a PDB) y, a continuación, ejecutar el siguiente

comando:

Alter system set inmemory_size=0; o

Alter system reset inmemory_size;

Habilitar:

alter system set inmemory_size=20G;

Niveles de prioridad en la memoria:

El almacén de columnas IM se debe completar con los datos más importantes para el rendimiento en la base de datos. Los datos de menor rendimiento pueden alojarse en un disco o unidad flash de menor costo. Por supuesto, si la base de datos es lo suficientemente pequeña, puede completar todas las tablas en el almacén de columnas IM. La base de datos en la memoria agrega un nuevo atributo INMEMORY para tablas y vistas materializadas.

Podemos habilitar el atributo INMEMORY en el espacio de

tablas, la tabla, la partición (sub) y la vista materializada.

Si habilita este atributo en el nivel de espacio de tablas, todas las tablas y las vistas medida en elapce de tablas se habilitarán para el almacén IMCOLUMN de manera predeterminada.

alter tablespace quest INMEMORY;

Si habilita este atributo en el nivel de tabla significa que todas las columnas de la tabla se deben completar en el almacén IM COLUMN. Sin embargo, es posible completar solo un subconjunto de columnas en el almacén IM COLUMN.

Alter table quest_tab INMEMORY NO Inmemory (EMP);

De manera similar, para la tabla particionada,

modifique la tabla quest_tab INMEMORY MODIFY Partition quest_part_1 No Inmemory;

Procesos en segundo plano:

IMCO:  El proceso en segundo plano de IMCO inicia la ocupación (rellenación previa) de objetos habilitados en la memoria con prioridad BAJA/MEDIA/ALTA/CRÍTICA.

SMCO: SMCO genera dinámicamente procesos secundarios (Wnnn) para implementar estas tareas.

Wnnn: Los procesos de Wnnn ejecutan tareas de llenado en la memoria y rellenado en la memoria para la ocupación o reocupación de objetos habilitados en la memoria.

Los objetos se completan en el almacén de columnas IM, ya sea en una lista con prioridad inmediatamente después de que se abre la base de datos o después de que se escanean (consultan) por primera vez. El orden en el que se llenan los objetos se controla con la palabra clave PRIORITY, la cual tiene cinco niveles. El valor predeterminado de PRIORITY es NONE, lo que significa que un objeto se completa solo después de que se escanea por primera vez Diferentes niveles de

prioridad controlados por la sub cláusula PRIORITY de la cláusula INMEMORY Priority Level Description CRITICAL El objeto CRÍTICO se completa inmediatamente después de que se abre la base de datos High Object se completa después de
que se



completan todos los objetos CRITICAL

MEDIUM Object se completa después de que se completan todos los objetos CRÍTICO y ALTO Low El objeto se completa después de

que todos los objetos CRÍTICOs, HIGH y MEDIUM se han ocupado NINGUNO Los objetos solo se completan después de

que se escanean por primera vez (valor predeterminado)

Los objetos que son más pequeños que 64 KB no se completan en la memoria, ya que desperdiciarán una cantidad considerable de espacio dentro del almacén de columnas IM a medida que la memoria se asigna en fragmentos de 1 MB.

Por ejemplo: alter table quest inmemory priority critical;

Técnicas de compresión en la memoria:

El almacén de columnas IM utiliza formatos de compresión especiales optimizados para la velocidad de acceso en lugar de la reducción del almacenamiento. La base de datos aumenta la velocidad de las siguientes maneras:
  • Los formatos de compresión permiten que la base de datos disminuya la cantidad de memoria procesada para cada columna. SQL se ejecuta directamente en las columnas comprimidas.
  • La base de datos utiliza instrucciones de vector (arreglo) SIMD para procesar un arreglo de valores de columna en un único ciclo de reloj de CPU. La base de datos puede almacenar muchos valores en un vector, lo cual maximiza los beneficios de rendimiento con el procesamiento de vectores SIMD.
La compresión en memoria se especifica mediante la palabra clave MEMCOMPRESS, una subcláusula del atributo INMEMORY. Hay seis niveles, cada uno de los cuales proporciona un nivel diferente de compresión y rendimiento.

Sin Memcompress: Los datos se completan en la memoria sin compresión.

Memcompress para DML: Es principalmente para el rendimiento de DML y la compresión mínima.

Memcompress for Query Low: Optimizado para el rendimiento de las consultas (valor predeterminado).

Memcompress for Query High:  Optimizado para el rendimiento de las consultas y también para ahorrar

espacio, Memcompress para la capacidad baja: Más ahorro de espacio en comparación con query high and low

Memcompress for Capacity High: Optimizado para ahorrar espacio y un poco menos de rendimiento.

Las relaciones de compresión pueden variar entre 2 y 20 veces, según la opción de compresión elegida, el tipo de datos y el contenido de la tabla.

Por ejemplo: alter table quest inmemory memcompress for query high;

Almacén de columnas en memoria en RAC: en el

ambiente de clúster, cada nodo tiene su propio almacén de columnas. Cada nodo en el clúster debe mantener el mismo tamaño que el almacén de columnas IM. De manera predeterminada, todos los objetos ocupados en la memoria se distribuirán en todos los almacenes de columnas IM del clúster. La distribución de objetos en los almacenes de columnas IM en un clúster se controla mediante dos subclausas adicionales al atributo INMEMORY: DISTRIBUTE y DUPLICATE (solo sistemas integrados).

Distribute:

los objetos se distribuyen en todo el clúster y se controlan mediante la sub cláusula distribute. Puede distribuir los objetos de las siguientes

maneras: distribuir por ranage en fila (dividir los objetos por fila en diferentes nodos

Distribuir por partición) distribuir las particiones a los nodos con en el clúster

Distribuir por subpartición: distribuir la sub partición a diferentes nodos.

Por ejemplo: alter table quest inmemory distribute by partition;

Aquí, importatnt decir que Oracle In-Memory RAC es una arquitectura que no comparte nada para las consultas. Es decir, si vuelve a generar una consulta sobre los objetos de datos en memoria (suponga que los objetos están distruidos en dos almacenes de columnas IM), puede acceder a los datos que residen solo en el nodo de afinidad, lo que significa que no comparta las IMCU (unidades de compresión en memoria) entre las instancias del clúster.

Por lo tanto, puede establecer el grado de paralelismo (DOP) en AUTO. El coordinador de consultas paralelas identifica las otras instancias de ubicación de IMCU. Si no puede configurar el DOP en AUTO, el cooordinador de consultas paralelas no utilizará las otras instancias de IMCU.

configure el grado de paralelismo para alterar automáticamente el conjunto del

sistema parallel_degree_policy=AUTO scope=both sid='*';

Duplicar:

para aumentar la disponibilidad, los objetos se copian en todas las instancias. Puede usar la subcláusula Duplicate para especificar que la tabla en la memoria se almacena en todas las instancias dentro del clúster. Para sistemas no diseñados, esta opción no funciona.

Por ejemplo: alter table quest inmemory duplicate all;

       La tabla quest se almacena en todas las instancias.

Monitoreo de objetos en la memoria:

Para monitorear objetos en memoria, Oracle presenta dos nuevas vistas de

V$: v$IM_SEGMENTS o v$IM_USER_SEGMENTS y v$IM_COLUMN_LEVEL.

Con estas vistas, podemos descubrir la cantidad de objetos que se completan actualmente en el almacén IMCOLUMN.

EX:

establecer líneas 256

páginas de conjunto 999

seleccionar segment_name,ROUND(SUM(BYTES)/1024/1024/1024,2) "DATA GB",

ROUND(SUM(INMEMORY_SIZE)/1024/1024/1024,2) "IN-MEM GB",

ROUND(SUM(BYTES-BYTES_NOT_POPULATED)*100/SUM(BYTES),2) "% IN_MEM",

ROUND(SUM(BYTES-BYTES_NOT_POPULATED)/SUM(INMEMORY_SIZE),2) "TASA DE COMPENSACIÓN"

de V$IM_SEGMENTS

grupo por propietario, segment_name

pedido por SUM(bytes) desc ;

SEGMENT_NAME GB ORIG GB IN-MEM % IN_MEM COMP RATIO

H_LINEITEM 317.27 68.2 88.77 4.13

H_PARTSUPP 35.3 17 21.04 100 1.67

EX: establezca líneas de

256

páginas de conjunto 999

set verify off col OBJECT

format a30

SELECT owner||'.'|| table_name OBJETO,

MEMORIA INMEMORY,inmemory_priority PRIORIDAD,

INMEMORY_DISTRIBUTE DISTRIBUIR,inmemory_compression COMPRESIÓN, inmemory_duplicate DUPLICAR DESDE



all_tables

donde owner='QUEST'

ORDER BY inmemory, owner||'.'|| table_name;

PRIORIDAD DE INMEMORY DE OBJETOS DISTRIBUIR COMPRESIÓN DUPLICADO

H_NATION ACTIVADO CRÍTICO AUTOMÁTICO PARA CONSULTA ALTA SIN DUPLICADO

H_REGION HABILITADO AUTO CRÍTICO PARA CONSULTA ALTA SIN DUPLICADO

H_CUSTOMER H_SUPPLIER En el

ejemplo anterior

notará que dos de las tablas ( Cliente y Proveedor) no tienen un valor para LA MEMORIA INMEMORY Columna. El atributo INMEMORY es un atributo de nivel de segmento. Las tablas Customer y Supplier son tablas particionadas y, por lo tanto, son objetos lógicos. El atributo INMEMORY para estas tablas se registrará en el nivel de partición o subpartición en *_TAB_ (SUB) PARTITIONS.

También se agregaron tres columnas adicionales( INMEMORY_PRIORITY, INMEMORY_DISTRIBUTE y INMEMORY_COMPRESSION) a las vistas *_TABLES para indicar los atributos actuales de InMemory para cada tabla.
Article Properties
Article Number: 000124827
Article Type: Solution
Last Modified: 21 Feb 2021
Version:  3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.