sql >> Databasteknik >  >> RDS >> Oracle

Hur samlar man in data från INMEMORY-partitionen?

IMCO(Inmemory Coordinator)-processen vaknar varannan minut och kontrollerar om några befolkningsuppgifter behöver slutföras. Så att fråga efter en tabell omedelbart efter att den har aktiverats för inmemory garanterar inte att frågan betjänas från inmemory.

Objekt fylls i i IM-kolumnlagret antingen i en prioriterad lista direkt efter att databasen har öppnats eller efter att tabellerna skannats (frågas) för första gången.

Till exempel, om vi aktiverar tabell tab1, tab2, tab3 för minne:

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

Dessa tabeller kommer i minnet när:

  1. IMCO-processen plockar upp dessa tabeller och laddar dem i minnesområdet (i prioritetsordningen högst till lägst:tab2, tab3 och tab1)
  2. Om vi ​​utför en urvalsfråga på någon av tabellerna (exempel:select * from tab1 ) innan IMCO-processen startar (varannan minut)

För att veta om en tabell/partition är helt laddad i minnet kan du fråga v$im_segments visa som följande:

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

Så för att svara på din fråga:

  1. Se till att tabellen läses in i minnet genom att fråga v$im_segments
  2. Om tabellen inte är inläst utför en valfråga på den för att få den att laddas in i minnesområdet
  3. Hämta frågeplan för den valda frågan i tabellen, den ska visa INMEMORY som en del av planen

Kolla denna whitepaper för mer information.




  1. Långsam exekvering av fråga i en tom tabell. (efter att ha raderat en stor mängd inlägg)

  2. Ta bort dubblerade mysql-rader utan primärnyckel

  3. Dynamisk tabellpartitionering i postgres

  4. SQL:Hur skulle du dela upp 100 000 poster från en Oracle-tabell i 5 bitar?