O processo IMCO (Inmemory Coordinator) ativa a cada dois minutos e verifica se alguma tarefa de preenchimento precisa ser concluída. Portanto, consultar uma tabela imediatamente após habilitá-la para inmemory não garante que a consulta seja atendida a partir de inmemory.
Os objetos são preenchidos no armazenamento da coluna de mensagens instantâneas em uma lista priorizada imediatamente após a abertura do banco de dados ou após as tabelas serem verificadas (consultadas) pela primeira vez.
Por exemplo, se habilitarmos a tabela tab1, tab2, tab3 para inmemory:
alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;
Essas tabelas entram na memória quando:
- O processo IMCO pega essas tabelas e as carrega na área de memória (na ordem de prioridade mais alta para a mais baixa:tab2, tab3 e tab1)
- Se realizarmos uma consulta de seleção em qualquer uma das tabelas (exemplo:
select * from tab1
) antes do início do processo IMCO (a cada 2 minutos)
Para saber se uma tabela/partição está carregada completamente na memória você pode consultar
v$im_segments
veja como a seguir:select owner, segment_name, partition_name, segment_type, bytes,
bytes_not_populated, populate_status from v$im_segments;
Então, respondendo sua pergunta:
- Certifique-se de que a tabela seja carregada na memória consultando
v$im_segments
- Se a tabela não estiver carregada, selecione a consulta para torná-la carregada na área de memória
- Obter plano de consulta para a consulta selecionada na tabela, deve mostrar INMEMORY como parte do plano
Verifique este documento para mais detalhes.