sql >> Database >  >> RDS >> Oracle

Hoe gegevens te verzamelen van de INMEMORY-partitie?

Het IMCO-proces (Inmemory Coordinator) wordt wakker elke twee minuten en controleert of er populatietaken moeten worden voltooid. Dus een query uitvoeren op een tabel onmiddellijk nadat deze is ingeschakeld voor inmemory, zorgt er niet voor dat de query wordt uitgevoerd vanuit inmemory.

Objecten worden direct nadat de database is geopend of nadat de tabellen voor de eerste keer zijn gescand (opgevraagd), in de IM-kolomopslag geplaatst in een lijst met prioriteiten.

Als we bijvoorbeeld tabel tab1, tab2, tab3 inschakelen voor inmemory:

alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;

Deze tabellen komen in het geheugen wanneer:

  1. IMCO-proces pikt deze tabellen op en laadt ze in het geheugengebied (in de volgorde van prioriteit hoogste naar laagste:tab2, tab3 en tab1)
  2. Als we een selectiequery uitvoeren op een van de tabellen (bijvoorbeeld:select * from tab1 ) voordat het IMCO-proces begint (elke 2 minuten)

Om te weten of een tabel/partitie volledig in inmemory is geladen, kun je v$im_segments opvragen bekijk als volgt:

select owner, segment_name, partition_name, segment_type, bytes, 
bytes_not_populated, populate_status from v$im_segments;

Dus, om je vraag te beantwoorden:

  1. Zorg ervoor dat de tabel in het geheugen wordt geladen door v$im_segments op te vragen
  2. Als de tabel niet is geladen, voer dan een selectiequery uit om deze in het geheugengebied te laden
  3. Krijg een queryplan voor de geselecteerde query op de tafel, het zou INMEMORY moeten tonen als onderdeel van het plan

Bekijk deze whitepaper voor meer details.




  1. Tabellen samenvoegen met kommawaarden

  2. Een array van tekenreeksen doorgeven aan een procedure en deze gebruiken in de WHERE-component met IN

  3. Hoe krijg ik Oracle, kijk welke procedures er lopen?

  4. Kan DLL "OraOps10.dll" niet laden