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:
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.