Il processo IMCO (Inmemory Coordinator) attiva ogni due minuti e controlla se è necessario completare le attività della popolazione. Pertanto, eseguire query su una tabella immediatamente dopo averla abilitata per inmemory non garantisce che la query venga servita da inmemory.
Gli oggetti vengono inseriti nell'archivio della colonna IM in un elenco con priorità subito dopo l'apertura del database o dopo la scansione (interrogazione) delle tabelle per la prima volta.
Ad esempio, se abilitiamo la tabella tab1, tab2, tab3 per inmemory:
alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;
Queste tabelle entrano in memoria quando:
- Il processo IMCO preleva queste tabelle e le carica nell'area di memoria (in ordine di priorità dal più alto al più basso:tab2, tab3 e tab1)
- Se eseguiamo select query su una qualsiasi delle tabelle (esempio:
select * from tab1
) prima dell'avvio del processo IMCO (ogni 2 minuti)
Per sapere se una tabella/partizione è stata caricata completamente in memoria puoi interrogare v$im_segments
visualizzare come segue:
select owner, segment_name, partition_name, segment_type, bytes,
bytes_not_populated, populate_status from v$im_segments;
Quindi, per rispondere alla tua domanda:
- Assicurati che la tabella sia caricata in memoria interrogando
v$im_segments
- Se la tabella non è caricata, esegui la query select su di essa per caricarla nell'area di memoria
- Ottieni un piano di query per la query selezionata sulla tabella, dovrebbe mostrare INMEMORY come parte del piano
Consulta questo whitepaper per maggiori dettagli.