Budzi się proces IMCO (Inmemory Coordinator) co dwie minuty i sprawdza, czy należy wykonać jakieś zadania związane z populacją. Dlatego wysyłanie zapytań do tabeli natychmiast po włączeniu jej dla pamięci nie gwarantuje, że zapytanie będzie obsługiwane z pamięci.
Obiekty są umieszczane w magazynie kolumn IM albo na liście priorytetów natychmiast po otwarciu bazy danych lub po pierwszym przeskanowaniu tabel (zapytaniu).
Na przykład, jeśli włączymy tabelę tab1, tab2, tab3 dla pamięci:
alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;
Tabele te trafiają do pamięci, gdy:
- Proces IMCO pobiera te tabele i ładuje je do obszaru pamięci (w kolejności od najwyższego do najniższego:tab2, tab3 i tab1)
- Jeśli wykonamy zapytanie select na dowolnej z tabel (przykład:
select * from tab1
) przed rozpoczęciem procesu IMCO (co 2 minuty)
Aby dowiedzieć się, czy tabela/partycja jest całkowicie załadowana do pamięci, możesz wykonać zapytanie v$im_segments
zobacz jak poniżej:
select owner, segment_name, partition_name, segment_type, bytes,
bytes_not_populated, populate_status from v$im_segments;
Aby odpowiedzieć na twoje pytanie:
- Upewnij się, że tabela jest załadowana do pamięci, wysyłając zapytanie
v$im_segments
- Jeśli tabela nie jest załadowana, wykonaj na niej zapytanie wybierające, aby załadować ją do obszaru pamięci
- Pobierz plan zapytania dla zapytania wybierającego w tabeli, powinien pokazywać INMEMORY jako część planu
Zapoznaj się z tym oficjalnym dokumentem po więcej szczegółów.