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 on-premises e agora está migrando do banco de dados on-premises 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 group-by.

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

O armazenamento de colunas In-Memory é o principal recurso do Database In-Memory. O armazenamento de colunas In-Memory reside na Área In-Memory, que é uma parte opcional da SGA (System Global Area). 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 varreduras muito rápidas, o que pode permitir que consultas analíticas executem ordens de magnitude mais rapidamente do que consultas baseadas em formato de linha. Consulte Oracle Database In-Memory para obter mais informações.

O armazenamento de colunas In-Memory aumenta dinamicamente com o tempo para acomodar os objetos INMEMORY mais quentes. Você pode usar a cláusula de tabela PRIORITY ou ter verificações contínuas de tabela para garantir que o armazenamento de colunas na Memória cresça 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 em 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 de computação 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 novo preenchimento 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 no armazenamento de colunas In-Memory. 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 na Memória.

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 do preenchimento 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 o banco de dados ser aberto.

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

  • 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 In-Memory.

  • 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ó são preenchidos após serem verificados pela primeira vez, se houver espaço disponível no armazenamento de colunas In-Memory. A prioridade NONE é a prioridade padrão.

Exemplo de criação de 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 de ser verificada pela primeira vez.

Exemplo de uso da 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 para a tabela employees.

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 o 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 exibição V$IM_SEGMENTS para determinar se os dados da tabela serã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 In-Memory, o objeto só é removido quando o objeto é eliminado ou movido ou o objeto é atualizado com o atributo NO INMEMORY. Por exemplo:
ALTER TABLE im_emp NO INMEMORY;

Para obter mais informações, consulte Como Funciona a População na Memória.

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

  • O banco de dados não preenche automaticamente objetos na Memória 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 do IM Manualmente e Procedimento DBMS_INMEMORY.POPULATE para obter mais informações.

  • Deve haver varreduras contínuas de tabela para garantir que o armazenamento de colunas na memória cresça automaticamente o suficiente para sua carga de trabalho. Se um objeto estiver parcialmente preenchido, a verificação de tabela poderá usar a Verificação Inteligente na Memória e no Exadata.

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 para a Á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 In-Memory são gerenciados dinamicamente pelo AIM (Automatic In-Memory). Por padrão, o recurso Automatic In-Memory está ativado para o seu Autonomous Database.

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

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

O tamanho máximo padrão da Memória para o seu Autonomous Database pode ser de até 50% do tamanho da SGA. No entanto, você pode modificar o tamanho máximo da 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 da Memória. Você pode especificar um valor no intervalo entre 0 e 70. Especificar 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 da Memória para 60% do tamanho da SGA.

Consulte SET_SGA_PERCENTAGE Procedures 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 In-Memory do seu Autonomous Database modificando o tamanho máximo da In-Memory 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 Procedures para obter mais informações.