Usar o Banco de Dados na Memória com o Autonomous Database

O recurso Database In-Memory disponível no Autonomous Database pode melhorar significativamente o desempenho para análises em tempo real e cargas de trabalho mistas.

Sobre o Database In-Memory

O Oracle Database In-Memory (Database In-Memory) é um conjunto de recursos que melhora muito o desempenho para análises em tempo real e cargas de trabalho mistas.

O recurso Database In-Memory é útil quando:
  • Você ativou o recurso In-Memory para seu banco de dados local e agora está migrando do banco de dados local para o Autonomous Database.

  • As consultas em seu banco de dados passam a maior parte do tempo de execução verificando e filtrando dados, bem como executando junções e agregações agrupadas.

  • Você precisa melhorar o tempo de resposta de suas consultas de natureza analítica.

O armazenamento de colunas na Memória é o recurso principal do Database In-Memory. O armazenamento de colunas In-Memory reside na Área In-Memory, que é uma parte opcional da Área Global do Sistema (SGA). Quando ativado para In-Memory, tabelas, partições, subpartições e views materializadas são preenchidas em um formato colunar no armazenamento de colunas In-Memory. Esse formato colunar é otimizado para verificações muito rápidas, o que pode permitir que as consultas analíticas executem ordens de magnitude mais rapidamente do que as consultas baseadas em formato de linha. Consulte Oracle Database In-Memory para obter mais informações.

O armazenamento de colunas na Memória aumenta dinamicamente com o tempo para acomodar os objetos INMEMORY mais quentes. Você pode usar a cláusula de tabela PRIORITY ou ter varreduras de tabela contínuas para garantir que o armazenamento de colunas Na Memória fique grande o suficiente para sua carga de trabalho. Consulte Dimensionando o Armazenamento de Colunas na Memória para obter mais informações.

Você pode usar a cláusula INMEMORY nas instruções DDL para ativar o In-Memory para os seguintes objetos:
  • Tabelas (incluindo tabelas externas)

  • Partições ou subpartições

  • Views materializadas

Consulte Ativando Objetos para Preenchimento na Memória para obter mais informações.

Observe o seguinte para ativar o Database In-Memory:

  • O Database In-Memory só está disponível para uma instância do Autonomous Database com:

    • O modelo computacional de ECPU

    • Um mínimo de 16 ECPUs

  • Se você reiniciar o banco de dados, os objetos ativados para INMEMORY exigirão novo preenchimento no armazenamento de colunas Na Memória. Dependendo da definição de prioridade, o repreenchimento pode ocorrer automaticamente ou no primeiro acesso. Se você estiver monitorando o desempenho, notará um desempenho mais lento até que o objeto seja preenchido novamente.

Ativando Objetos para Preenchimento na Memória

Você pode ativar e desativar objetos para preenchimento no armazenamento de colunas Na Memória.

Somente objetos com a cláusula INMEMORY são elegíveis para preenchimento no armazenamento de colunas Na Memória. Use as instruções DDL CREATE TABLE ou ALTER TABLE para aplicar a cláusula INMEMORY.

Por padrão, os objetos são criados com o atributo NO INMEMORY, o que significa que eles não são elegíveis para preenchimento no armazenamento de colunas Na Memória.

A ativação de um objeto como INMEMORY está especificando que um objeto pode residir potencialmente no armazenamento de colunas Na Memória. O preenchimento na memória é uma etapa separada que ocorre quando o banco de dados lê os dados existentes no formato de linha, os transforma em formato colunar e, em seguida, os armazena no armazenamento de colunas na memória. Por padrão, todas as colunas em um objeto com o atributo INMEMORY são preenchidas no armazenamento de colunas In-Memory.

A definição do atributo INMEMORY em um objeto implica que o objeto é um candidato para preenchimento no armazenamento de colunas Na Memória. O objeto não é preenchido imediatamente para o armazenamento de colunas Na Memória. No entanto, você pode usar a cláusula PRIORITY com o atributo INMEMORY para controlar a prioridade da população no armazenamento de colunas Na Memória. A cláusula PRIORITY pode ser especificada com os seguintes valores:

  • CRITICAL: O objeto é preenchido imediatamente após a abertura do banco de dados.

  • HIGH : O objeto é preenchido após todos os objetos CRITICAL terem sido preenchidos, se o espaço permanecer disponível no armazenamento de colunas Na Memória.

  • MEDIUM: O objeto é preenchido após todos os objetos CRITICAL e HIGH terem sido preenchidos, e o espaço permanece disponível no armazenamento de colunas Na Memória.

  • LOW: O objeto é preenchido após todos os objetos CRITICAL, HIGH e MEDIUM terem sido preenchidos, se o espaço permanecer disponível no armazenamento de colunas Na Memória.

  • NONE: Os objetos só serão preenchidos depois que forem digitalizados pela primeira vez, se houver espaço disponível no armazenamento de colunas Na Memória. A prioridade NONE é a prioridade padrão.

Exemplo para criar uma tabela com o atributo INMEMORY:

CREATE TABLE im_emp (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY;
Este exemplo cria a tabela im_emp com o atributo INMEMORY. O exemplo usa a prioridade padrão de NONE para a cláusula INMEMORY, o que significa que a tabela só é preenchida depois que é verificada pela primeira vez.

Exemplo para usar a cláusula PRIORITY com o atributo INMEMORY:

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

Exemplo para definir o atributo INMEMORY para uma tabela existente:

ALTER TABLE employees INMEMORY;

Este exemplo define o atributo INMEMORY da tabela employees no atributo.

Você também pode alterar uma tabela para definir o atributo INMEMORY somente para um subconjunto de colunas na tabela. Por exemplo:

ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);
Este exemplo define o atributo INMEMORY para im_emp_tb, mas exclui a coluna depno.

Consulte INMEMORY_TABLE_CLAUSE para obter mais informações.

Depois que INMEMORY for ativado para uma tabela, você poderá consultar a view V$IM_SEGMENTS para determinar se os dados da tabela são preenchidos no armazenamento de colunas Na Memória. Por exemplo:
SELECT SEGMENT_NAME, POPULATE_STATUS 
FROM   V$IM_SEGMENTS 
WHERE  SEGMENT_NAME = 'IM_EMP';

Consulte V$IM_SEGMENTS para obter mais informações.

Depois que o objeto é preenchido no armazenamento de colunas Na Memória, o objeto só é despejado quando o objeto é eliminado ou movido, ou o objeto é atualizado com o atributo NO INMEMORY. Por exemplo:
ALTER TABLE im_emp NO INMEMORY;

Consulte Como Funciona o Preenchimento na Memória para obter mais informações.

Observações para ativar objetos para preenchimento na Memória:

  • O banco de dados não preenche automaticamente os objetos In-Memory com a definição PRIORITY de NONE. No entanto, você pode preencher manualmente esses objetos no armazenamento de colunas In-Memory. Consulte Preenchendo o Armazenamento de Colunas IM Manualmente e Procedimento DBMS_INMEMORY.POPULATE para obter mais informações.

  • Deve haver varreduras de tabela contínuas para garantir que o armazenamento de colunas Na Memória aumente automaticamente o suficiente para sua carga de trabalho. Se um objeto estiver parcialmente preenchido, a verificação da tabela poderá usar o In-Memory e o Exadata Smart Scan.

Dimensionando o Armazenamento de Colunas na Memória

Quando sua instância do Autonomous Database tem 16 ou mais ECPUs, o recurso Database In-Memory é ativado por padrão e até 50% da SGA pode ser usada pelo In-Memory.

A memória da Área na Memória não é reservada antecipadamente, e o tamanho inicial da Área na Memória é 0. A Área In-Memory cresce gradualmente cada vez que há espaço insuficiente para a população In-Memory.

Os objetos no armazenamento de colunas na Memória são gerenciados dinamicamente pelo Automatic In-Memory (AIM). Por padrão, o Automatic In-Memory está ativado para o seu Autonomous Database.

O AIM usa estatísticas internas para determinar a frequência com que objetos e colunas In-Memory são acessados. Se o armazenamento de colunas na Memória estiver cheio e outros segmentos acessados com mais frequência se beneficiarem do preenchimento no armazenamento de colunas na Memória, o armazenamento de colunas na Memória removerá os segmentos inativos.

Para garantir que o conjunto de dados de trabalho seja sempre preenchido, o AIM despeja automaticamente segmentos frios (acessados com frequência). Consulte Automatizando o Gerenciamento de Objetos na Memória para obter mais informações.

O tamanho máximo padrão na memória do seu Autonomous Database pode ser de até 50% do tamanho da SGA. No entanto, você pode modificar o tamanho máximo na Memória do seu Autonomous Database:
  • Alterando a contagem de ECPUs do seu Autonomous Database.

  • Usando o procedimento DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE para modificar o tamanho máximo na Memória. Você pode especificar um valor no intervalo entre 0 e 70. A especificação de um valor zero (0) desativa o Database In-Memory. Por exemplo:
    BEGIN
        DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
    END;
    /
    Este exemplo modifica o tamanho máximo na Memória para 60% do tamanho da SGA.

Consulte SET_SGA_PERCENTAGE Procedimento para obter mais informações.

Consulte a view V$INMEMORY_AREA para recuperar as informações sobre alocação de espaço dentro da área In-Memory. Por exemplo:

SELECT * FROM V$INMEMORY_AREA;
Consulte V$INMEMORY_AREA para obter mais informações.

Desativando o Armazenamento de Colunas na Memória

Você pode desativar o armazenamento de colunas Na Memória do seu Autonomous Database modificando o tamanho máximo na Memória para 0.

Por exemplo:

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

Este exemplo modifica o valor máximo do tamanho In-Memory para zero (0) e desativa o Database In-Memory da instância.

Consulte SET_SGA_PERCENTAGE Procedimento para obter mais informações.