Der IMCO(Inmemory Coordinator)-Prozess weckt alle zwei Minuten und überprüft, ob Auffüllungsaufgaben abgeschlossen werden müssen. Das Abfragen einer Tabelle unmittelbar nach dem Aktivieren für In-Memory stellt also nicht sicher, dass diese Abfrage aus In-Memory bedient wird.
Objekte werden entweder in einer priorisierten Liste sofort nach dem Öffnen der Datenbank oder nachdem die Tabellen zum ersten Mal gescannt (abgefragt) wurden, in den IM-Spaltenspeicher gefüllt.
Wenn wir zum Beispiel die Tabelle tab1, tab2, tab3 für den Arbeitsspeicher aktivieren:
alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;
Diese Tabellen gelangen in den Arbeitsspeicher, wenn:
- Der IMCO-Prozess nimmt diese Tabellen auf und lädt sie in den Speicherbereich (in der Reihenfolge von der höchsten zur niedrigsten Priorität:tab2, tab3 und tab1)
- Wenn wir eine Auswahlabfrage für eine der Tabellen durchführen (Beispiel:
select * from tab1
) bevor der IMCO-Prozess beginnt (alle 2 Minuten)
Um zu wissen, ob eine Tabelle/Partition vollständig in den Arbeitsspeicher geladen ist, können Sie v$im_segments
abfragen wie folgt anzeigen:
select owner, segment_name, partition_name, segment_type, bytes,
bytes_not_populated, populate_status from v$im_segments;
Also, um Ihre Frage zu beantworten:
- Stellen Sie sicher, dass die Tabelle in den Arbeitsspeicher geladen wird, indem Sie
v$im_segments
abfragen - Wenn die Tabelle nicht geladen ist, führen Sie eine Auswahlabfrage durch, damit sie in den Speicherbereich geladen wird
- Abfrageplan für die ausgewählte Abfrage in der Tabelle abrufen, es sollte INMEMORY als Teil des Plans anzeigen
Sehen Sie sich dieses Whitepaper an für weitere Details.