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

Como configurar a opção de bancos de dados em memória Oracle 12c

Summary: Nossa missão é oferecer soluções que simplificam a TI ao fornecer soluções de banco de dados, desenvolvimento personalizado, datacenters dinâmicos e computação flexível

This article applies to   This article does not apply to 

Symptoms

Aplica-se a: 
Banco de dados Oracle: 12.1.0.2

Autor:

Mahesh Reddy M

Introdução:

Com o lançamento do banco de dados Oracle 12c In-Memory, um único banco de dados agora pode acomodar com eficiência cargas de trabalho mistas, proporcionando desempenho ideal para transações e, ao mesmo tempo, oferecendo suporte para análise e geração de relatórios em tempo real A tecnologia In-Memory permite que os datamarts e os data warehouses ofereçam uma lógica analítica ainda mais específica, possibilitando aos usuários finais fazer várias consultas sobre os negócios na mesma velocidade que antes levariam para fazer apenas uma. Esses recursos permitem que você armazene colunas, tabelas, partições e exibições materializadas em memória em um formato de coluna, em vez do formato de linha típico. O In-Memory Column Store (armazenamento de coluna IM) foi o recurso principal do conjunto de patches 12.1.0.2.

Arquitetura do banco de dados Oracle 12c In-Memory:

Geralmente, os dados são armazenados somente no formato de linha, em que o banco de dados In-Memory armazena dados somente no formato de coluna. Portanto, o banco de dados Oracle 12c oferece suporte para arquitetura de formato duplo.
  1. Sempre que os dados são solicitados para operações de leitura/gravação (manipulações de dados), eles são carregados no armazenamento de linha tradicional (cache de buffer)
  2. Sempre que os dados são solicitados para operações somente leitura, eles são preenchidos em um novo armazenamento de coluna In-Memory. Esse preenchimento inclui uma transformação do formato de linha para o formato de coluna.
  3. Sempre que uma transação que inclui inserções, atualizações ou exclusões for executada, os novos dados serão exibidos de forma imediata e simultânea tanto no armazenamento de linha como no armazenamento de coluna In-Memory. Portanto, ambos os armazenamentos são consistentes em termos de transação
O armazenamento de coluna In-Memory:

O banco de dados In-Memory usa um armazenamento de coluna In-Memory, que é um novo componente da Área global do sistema (SGA), chamado de Área In-Memory. Os dados do armazenamento de coluna IM não residem no formato de linha tradicional. Em vez disso, ele usa um novo formato de coluna. O armazenamento de coluna IM não substitui o cache de buffer. Em vez disso, funciona como um complemento, para que os dados agora possam ser armazenados em memória tanto no formato de linha como de coluna

A área In-Memory é um pool estático no SGA e seu tamanho é controlado pelo parâmetro de inicialização INMEMORY_SIZE (padrão 0). O tamanho atual da área In-Memory está visível em V$SGA

O armazene de coluna IM está subdividido em dois pools:
  1. Pool de 1 MB: armazena os dados no formato de coluna reais
  2. Pool de 64K: armazena os metadados sobre os objetos.
Podemos ver a quantidade de memória disponível em cada pool usando a consulta abaixo

SQL> selecione * em v$inmemory_area;
 
POOL  ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_I
POOL DE 1 MB 2.5767E+11 2.3569E+11 CONCLUÍDO 1
POOL DE 64 KB 6.4408E+10  876347392 CONCLUÍDO 1
POOL DE 1 MB 2.5767E+11 2.3569E+11 CONCLUÍDO 2
POOL DE 64 KB  6.4408E+10 876347392 CONCLUÍDO 2
POOL DE 1 MB 2.5767E+11 2.3569E+11 CONCLUÍDO 3
POOL DE 64 KB 6.4408E+10 876347392 CONCLUÍDO 3
Tabela 1: memória disponível em cada pool

Ativar o armazenamento de coluna IM:

Como um pool estático, todas as alterações no parâmetro INMEMORY_SIZE não entrarão em vigor até que a instância do banco de dados seja reiniciada. Ele também não é afetado nem controlado pelo Gerenciamento automático de memória (AMM). A área In-Memory deve ter um tamanho 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 IMMEDIATE;
sql>STARTUP;

A interface do ORACLE será iniciada.

A área global total do sistema é de 4.2950E+11 bytes
Tamanhos fixos de 7677400 bytes
Tamanho da variável de 2.0938E+10 bytes
Buffers de banco de dados de 8.5899E+10 bytes
Refazer buffers de 529190912 bytes
Área In-Memory de 3.2212E+11 bytes
Banco de dados montado.
Banco de dados aberto.

Podemos ver as configurações In-Memory usando a consulta abaixo

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_   integer       1
percent
optimizer_inmemory_aware               boolean      TRUE

Podemos definir o parâmetro inmemory_size no nível de CDB e PDB. Se você definir esse parâmetro no nível de PDB, não será necessário reiniciar a instância ou o PDB. A soma de todos os valores de PDBs é menor ou igual ao valor de CDB.

É possível ativar ou desativar a opção In-Memory no nível de PDB exibido abaixo

Conecte-se ao PDB e, em seguida, execute o comando abaixo

Desativar:

Altere o conjunto do sistema inmemory_size=0; ou

Altere a redefinição do sistema inmemory_size;

Ativar:

Altere o conjunto de sistemas inmemory_size=20G;

Níveis de prioridade In-Memory:

O armazenamento de coluna IM deve ser preenchido com os dados mais importantes para o desempenho do banco de dados. Dados menos importantes para o desempenho podem ser armazenados em flash ou disco de custo mais baixo. Se o seu banco de dados for pequeno o suficiente, você pode preencher todas as suas tabelas no armazenamento de coluna IM. O banco de dados In-Memory adiciona um novo atributo INMEMORY às tabelas e exibições materializadas.

Podemos ativar o atributo EM MEMÓRIA em

Tablespace, tabela, (sub) partição e exibição materializada.

Se você ativar esse atributo no nível de tablespace, todas as tabelas e exibições materializadas no tablespace serão ativadas para o armazenamento DE COLUNA IM por padrão.

alterar a busca de tablespace EM MEMÓRIA;

Se você ativar esse atributo no nível da tabela, significa que todas as colunas da tabela devem ser preenchidas no armazenamento DE COLUNA IM. No entanto, é possível preencher apenas o subconjunto de colunas no armazenamento DE COLUNA IM.

Alterar a tabela quest_tab INMEMORY NO Inmemory (EMP);

O mesmo se aplica à tabela particionada

Alterar tabela quest_tab INMEMORY MODIFY Partition  quest_part_1 No Inmemory;

Processos de segundo plano:

IMCO: o processo de segundo plano IMCO inicia o preenchimento (pré-preenchimento) de objetos habilitados para tecnologia In-Memory com prioridade BAIXA/MÉDIA/ALTA/CRÍTICA.

SMCO: o SMCO gera dinamicamente processos secundários (Wnnn) para implementar essas tarefas.

Wnnn: os processos Wnnn executam as tarefas de preencher In-Memory e repreencher In-Memory para preenchimento ou repreenchimento de objetos habilitados para tecnologia In-Memory.

Os objetos são preenchidos no armazenamento de coluna IM em uma lista priorizada imediatamente depois que o banco de dados é aberto ou depois que eles são verificados (consultados) pela primeira vez. A ordem na qual os objetos são preenchidos é controlada pela palavra-chave PRIORIDADE, que tem cinco níveis. A PRIORIDADE padrão é NENHUMA, o que significa que um objeto é preenchido somente depois de ser examinado pela primeira vez

Diferentes níveis de prioridade controlados pela subcláusula PRIORIDADE da cláusula de EM MEMÓRIA
Descrição do nível de prioridade

CRÍTICA: o objeto é preenchido imediatamente depois que o banco de dados é aberto

ALTA: o objeto é preenchido após o preenchimento de todos os objetos CRÍTICOS                                             

MÉDIA: o objeto é preenchido após o preenchimento de todos os objetos CRÍTICOS E ALTOS

BAIXA: o objeto é preenchido após o preenchimento de todos os objetos CRÍTICOS, ALTOS E MÉDIOS

NENHUMA: objeto só é preenchido após a primeira verificação (padrão)

 Objetos menores que 64 KB não são preenchidos na memória, pois eles perderão uma quantidade considerável de espaço no armazenamento de coluna IM, já que a memória é alocada em fragmentos de 1 MB.

Por exemplo: alterar busca da tabela em memória de prioridade crítica;

Técnicas de compactação In-Memory:

O armazenamento de coluna IM utiliza formatos especiais de compactação otimizados para velocidade de acesso em vez de redução do armazenamento. O banco de dados aumenta a velocidade das seguintes maneiras:
  • Os formatos de compactação permitem que o banco de dados diminua a quantidade de memória processada para cada coluna. O SQL é executado diretamente nas colunas compactada.
  • O banco de dados usa instruções de vetor (array) SIMD para processar valores de um array de coluna em um único ciclo de relógio da CPU. O banco de dados pode armazenar vários valores em um vetor, o que maximiza os benefícios de desempenho com o processamento do vetor SIMD.
A compactação In-Memory é especificada usando a palavra-chave MEMCOMPRESS, uma subcláusula do atributo INMEMORY. Há seis níveis, cada um deles oferece um nível diferente de compactação e desempenho.

Sem Memcompress: os dados são preenchidos no In-Memory sem compactação.

Compactação de memória para DML: voltado principalmente para o desempenho de DML e a compactação mínima.

Compactação de memória para baixa consulta: otimizada para desempenho de consulta (padrão).

Compactação de memória para alta consulta: otimizada para desempenho de consulta e economia de espaço

Compactação de memória para baixa capacidade: mais economia de espaço para consulta alta e baixa

Compactação de memória para alta capacidade: otimizada para economia de espaço e desempenho um pouco menor.

As taxas de compactação podem variar de 2x a 20 x, dependendo da opção de compactação escolhida, do tipo de dados e do conteúdo da tabela.

Por exemplo: alterar busca de tabela de compactação de memória em memória para alta consulta;

Armazenamento de coluna In-Memory no RAC:

No ambiente do cluster, cada nó tem seu próprio armazenamento de coluna. Cada nó no cluster deve ter o mesmo tamanho do armazenamento de coluna IM. Por padrão, todos os objetos preenchidos na memória serão distribuídos por todos os armazenamentos de coluna IM no cluster. A distribuição de objetos em todos os armazenamentos de colunas IM em um cluster é controlada por duas subcláusulas adicionais do atributo EM MEMÓRIA: DISTRIBUIR e DUPLICAR (somente sistemas projetados).

Distribuir:

Os objetos que são distribuídos em todo o cluster são controlados pela subcláusula de distribuição. Você pode distribuir os objetos da seguinte maneira:

Distribuir por intervalo de linha: distribui os objetos por linhas para nós diferentes

Distribuir por partição: distribui as partições para nós no cluster

Distribuir por subpartição: distribui a subpartição para nós diferentes.

Por exemplo: alterar busca de tabela de distribuição em memória por partição;

Aqui, é importante dizer que o Oracle RAC In-Memory é uma arquitetura sem compartilhamento para consultas. Por exemplo, se você criar uma consulta de objetos de dados inmemory (supondo que os objetos foram distribuídos em dois armazenamentos de coluna IM), é possível acessar os dados armazenados somente no nó de afinidade. Isso significa que você não deve compartilhar as IMCUs (Inmemory compression units, unidades de compactação In-Memory) nas instâncias do cluster.

Portanto, você pode definir o grau de paralelismo (DOP) para automático. O coordenador de consulta paralela identifica as outras instâncias do local da IMCU. Se você conseguir definir o DOP como automático, o coordenador da consulta paralela não usará as outras instâncias das IMCUs.

defina o grau de paralelo para automático

altere a configuração do sistema parallel_degree_policy=AUTO scope=both sid='*';

Duplicar:

Para aumentar a disponibilidade, os objetos são copiados em todas as instâncias. Você pode usar a subcláusula de duplicação para especificar que a tabela de em memória está armazenada em todas as instâncias no cluster. Para sistemas não projetados, essa opção não funciona.

Por exemplo: alterar a busca de tabela em memória para duplicar todos;

       a tabela buscada é armazenada em todas as instâncias.

Como monitorar objetos In-Memory:

Para monitorar objetos em memória, a Oracle lançou duas novas exibição V$:

v$IM_SEGMENTS ou  v$IM_USER_SEGMENTS e v$IM_COLUMN_LEVEL.

Ao usar essas exibições, podemos descobrir quantos objetos estão preenchidos no armazenamento DE COLUNA IM.

Por exemplo

set linesize 256

set pagesize 999

select 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) "COMP RATIO"

from V$IM_SEGMENTS

group by owner,segment_name

order by SUM(bytes) desc;

SEGMENT_NAME              ORIG GB     IN-MEM GB   % IN_MEM    COMP RATIO

H_LINEITEM                         317.27          68.2                88.77           4.13

H_PARTSUPP                         35.17        21.04                100             1.67

Por exemplo

set linesize 256

set pagesize 999

set verify off

col OBJECT format a30

SELECT owner||'.'||table_name OBJECT,

inmemory INMEMORY,inmemory_priority PRIORITY,

inmemory_distribute DISTRIBUTE,inmemory_compression COMPRESSION,

inmemory_duplicate DUPLICATE

FROM all_tables

where owner='QUEST'

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

OBJECT               INMEMORY   PRIORITY   DISTRIBUTE   COMPRESSION              DUPLICATE

H_NATION         ENABLED      CRITICAL          AUTO           FOR QUERY HIGH            NO DUPLICATE

H_REGION         ENABLED     CRITICAL          AUTO           FOR QUERY HIGH            NO DUPLICATE

H_CUSTOMER

H_SUPPLIER

  No exemplo acima, você perceberá que duas das tabelas (Cliente e Fornecedor) não têm um valor para a coluna Em memória. O atributo EM MEMÓRIA é um atributo de nível de segmento. As tabelas Cliente e Fornecedor são particionadas e, portanto, são objetos lógicos. O atributo EM MEMÓRIA para essas tabelas será registrado no nível da partição ou da subpartição em *_TAB_ (SUB) PARTITIONS.

Três colunas adicionais (INMEMORY_PRIORITY, INMEMORY_DISTRIBUTE e INMEMORY_COMPRESSION) também foram adicionadas às exibições *_TABLES para indicar os atributos Em memória atuais de cada tabela.
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.