Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie sammelt man Daten von der INMEMORY-Partition?

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:

  1. 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)
  2. 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:

  1. Stellen Sie sicher, dass die Tabelle in den Arbeitsspeicher geladen wird, indem Sie v$im_segments abfragen
  2. Wenn die Tabelle nicht geladen ist, führen Sie eine Auswahlabfrage durch, damit sie in den Speicherbereich geladen wird
  3. 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.