Oracle Database 12c: In-Memory (Parte II)

Por Joel Perez , Mahir M. Quluzade (OCE) & Flávio Soares (OCE)
Postado em Julho 2015

Continuamos aqui depois do artigo Oracle Database 12c: In-Memory (Parte I), que é a introdução a esta nova e poderosa feature do banco de dados Oracle que vem no o Oracle Database 12 Release 1.

Você pode entretanto habilitar o IM Column Store nos tablespaces. Assim, todas as tabelas e materialized views no tablespace são automaticamente habilitados noIM column store. Você pode também habilitar o IM Column store para todos os objetos e tablespace depois da criação com o comando ALTER … DDL (Lista de Código 4).

Lista de Código 4: IM Column Store para os tablespaces

SQL> create tablespace TBSIM1 datafile '/u01/app/oracle/oradata/prmdb/tbsim1.dbf' size 10M default inmemory;
Tablespace created.

SQL> select tablespace_name, def_inmemory from user_tablespaces;

TABLESPACE_NAME            DEF_INME
-------------------------- --------
SYSTEM                     DISABLED
SYSAUX                     DISABLED
UNDOTBS1                   DISABLED
TEMP                       DISABLED
USERS                      DISABLED
CMDATA                     DISABLED
TBSIM1                     ENABLED

SQL> create table TBIM2 as select * from dba_objects;  
Table created.

SQL> alter table TBIM2 INMEMORY;
Table altered.

SQL> create tablespace TBSIM2 
2  datafile '/u01/app/oracle/oradata/prmdb/tbsim2.dbf' size 10M ;
Tablespace created.

SQL> alter tablespace TBSIM2 default INMEMORY;
Tablespace altered.


O IM Column Storeé habilitado por padrão apenas para novos objetos criados no tablespace, caso oIM Column Store for habilitado para o tablespace,dessa forma, o IM Column Store não irá fucionar para objetos antigos do tablespaces.
Objetos populadosno In-Memory contém dois tipos de pools: um pool de 1 MB utilizado para o armazenamento dos dados em formato colunar e um outro pool de 64KB utilizado para armazenar metadados sobre objetos populados. Podemos verificar quantidade de memória disponível para cada pool através da view V $ INMEMORY_AREA (Lista de Código 5).

Lista de Código 5: Quantidade disponível de memória na área In-Memory

SQL> select * from v$inmemory_area;
   
POOL                   ALLOC_BYTES USED_BYTES POPULATE_STATUS
---------------------- ----------- ---------- ---------------
1MB POOL                 250609664    6291456            DONE
64KB POOL                 46137344     262144            DONE

Parâmetros INMEMORY

Nós podemos especificar como a data da tabela é armazenada dentro da IM Column store usando os parâmetros do IM. Os parâmetros são específicos em 4 tipos: Memory Compression, Priority, Distribute eos Duplicate parâmetros.
Memory Compression (inmemory_memcompress)cláusula especificada o método de compactação para os dados armazenados na IM Column store. O padrão é NOMEMCOMPRESS, significa que não comprime os dados na memória. Para instruir o banco de dados para compactar os dados na memória, especifique MEMCOMPRESS FOR seguido por um dos seguintes métodos (Tabela 1):

Tabela 1: Métodos de Compressão


Compressão(inmemory_memcompress)

Descrição

DML

Este método é otimizado para operações DML e realiza uma compactação muito baixa ou quase nenhuma dos dados

QUERY LOW 

Este método comprime os dados na in-memory (exceto para DML) e resulta no melhor desempenho da consulta. Este é o padrão.

QUERY HIGH 

Este método comprime osdados na memória mais do que a QUERY LOW, mas menos do queCAPACITY LOW.

CAPACITY LOW 

Este método comprime os dados na memória mais do que QUERY HIGH, mas menos do que CAPACITY HIGH, e resulta em excelentes performances na query.

CAPACITY HIGH 

Este método comprime o in-memory data mais do que todos os outros métodos e resulta em ótimas performances nas consultas.


Recomendações:  
Você pode usar Oracle Compression Advisor –package PL/SQL DMBS_COMPRESSION para estimar o ratio de compressão pode ser usado para o MEMCOMPRESS.

Lista de Código 6: Usando a cláusula MEMCOMPRESS

SQL> alter table TBIM1 inmemory memcompress for capacity high;
Table altered.

SQL> alter table MVIM_TB1 inmemory memcompress for capacity low; 
Table altered.

SQL> alter table TBIM2 inmemory memcompress for query low;
Table altered.

SQL> create table TBIM3 (n number,v varchar2(1)) 
2  inmemory memcompress for query high; 
Table created.

SQL> select table_name, inmemory, inmemory_compression from user_tables;

TABLE_NAME    INMEMORY     INMEMORY_COMPRESS
------------- ------------ --------------------
TBIM1         ENABLED      FOR CAPACITY HIGH
TB1           DISABLED
MVIM_TB1      ENABLED      FOR CAPACITY LOW
TBIM2         ENABLED      FOR QUERY LOW 
TBIM3         ENABLED      FOR QUERY HIGH NONE
5 rows selected.

 

Priority (inmemory_priority)cláusula que especifica a prioridade de preenchimento de dados no IM column store. Você pode especificar a prioridade dos dados no IM column store com a seguinte cláusula PRIORITY.(Tabela 2):

Tabela 2: Prioridades do In-Memory

Prioridade (inmemory_priority)

Descrição

NONE 

Oracle Database controla quando os dados tabela é preenchida na IM column store. População de dados requerida pode ser adiada se a memória necessária for necessária para outras tarefas. Além disso, o Oracle Database pode preencher algumas colunas da tabela, mas não outros, na IM column store. Este é o padrão

LOW 

Dados da tabela é preenchida na IM column store antes os dados dos objetos do banco de dados com prioridade NONE e depois os dados para objetos do banco de dados com prioridade MEDIUM, HIGH, ou CRITICAL.

MEDIUM 

Dados da tabela é preenchido na IM column store antes os dados dos objetos com prioridade NONE ou LOW depois os dados para objetos do banco de dados com prioridade HIGH or CRITICAL

HIGH 

Dados da tabela é preenchido na IM column store antes os dados dos objetos com prioridade NONE, LOW ou MEDIUM depois os dados para objetos do banco de dados com prioridade CRITICAL

CRITICAL 

Dados da tabela é preenchido na IM column store antes os dados dos objetos com prioridade NONE, LOW, MEDIUM, or HIGH


Mostrei exemplos para a utilização da cláusula PRIORITY abaixo: Lista de código 6

Lista de Código 6: Usando cláusula PRIORITY

SQL> alter table TBIM1 inmemory priority low; 
Table altered.

SQL> alter table TBIM2 inmemory priority high;
Table altered.

SQL> create table TBIM4 (n number, v varchar2(1), d date)
2  inmemory memcompress for dml priority low;
Table created.

SQL> select table_name, inmemory, inmemory_compression,inmemory_priority
2  from user_tables;

TABLE_NAME   INMEMORY     INMEMORY_COMPRESS    INMEMORY_PRIORITY
------------ ------------ -------------------- ------------------
TBIM1        ENABLED      FOR QUERY LOW        LOW
TB1          DISABLED
MVIM_TB1     ENABLED      FOR CAPACITY LOW     NONE
TBIM2        ENABLED      FOR QUERY LOW        HIGH
TBIM3        ENABLED      FOR QUERY HIGH       NONE
TBIM4        ENABLED      FOR DML              LOW
6 rows selected.
 

DISTRIBUTE (inmemory_distribute) eDUPLICATE (inmemory_duplicate) cláusulas usada apenas com o Oracle Real Application Clusters (RAC). Você pode ler sobre essa cláusula na próxima parte desta série de artigos.

Restrições do IM
IM Column Store tem algumas restrições:

  • Index Organized Tables (IOTs) e Clustered Tables não podem ser populadas com IM Column Store.
  • LONGS (deprecated desde o Oracle Database 8i) e Out of line LOBs data types também não são suportados em IM Column store.
  • Objetos que são menores do que 64KB não são populados em memória.
Você pode usar o IM column store no banco de dados Logical Standby, mas o IM Column Store não pode ser utilizado em um instancia com Active Data Guard standby no atual release. 


 

 

Joel Pérez é um DBA Especialista (Oracle ACE Director, OCM Cloud Admin. & OCM11g ). Com mais de 14 anos de experiência do mundo Oracle Technology, especializado em arquitetura e implementação de soluções como: Cloud, Alta disponibilidade, Disaster/Recovery, Upgrades, replicação e todos as áreas relacionadas com bancos de dados Oracle. Consultor Internacional realizando conferências em mais de 50 países e inúmeros clientes em todo o mundo. Um dos principais escritores de artigos da Technical Oracle: OTN Espanhol e Português OTN. Regular Speaker nos eventos Oracle em todo o mundo como: OTN LAD, OTN MENA, OTN APAC e muito mais. Joel sempre foi conhecida por ser pioneiro em tecnologia Oracle desde os primeiros dias de sua carreira sendo o primeiro latino-americano premiado como "OTN Expert" no ano de 2003 pela Oracle Corporation, um dos primeiros "ACE Oracle" no Oracle ACE Program no ano de 2004, um dos primeiros OCP Database Cloud Administrator em todo o mundo no ano de 2013 e como um das maiores realizações profissionais em sua carreira, recentemente ele foi homenageado como o primeiro "OCM Database Cloud Administrator" do mundo. Joel Pérez’s OCM Profile: education.oracle.com/education/otn/JoelPerez.htm

Mahir M. Quluzade é um DBA Sênior com mais de 10 anos de experiência em banco de dados Oracle com foco principal na alta disponibilidade e soluções de recuperação de desastres (RAC, Data Guard, RMAN, ...). Mahir está atualmente trabalhando no Banco Central da República do Azerbaijão. Ele é um DBA OCP. Mahir é membro fundador do Azerbaijão a Oracle User Group (AZEROUG); também é um blogger. Siga Mahir em seu blog.

Flávio Soares
é um Oracle DBA Sênior, Exadata DMA, Troubleshooter e Consultor Oracle, certificado em OCP/OCE RAC. Especialista em Exadata, alta disponibilidade e replicação de dados com soluções Oracle. Flávio disponibiliza frequentes informações para a comunidade Oracle através do seu blog.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.