Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products

Konfigurera alternativet Oracle Database 12c In-Memory

Summary: Vi vill leverera lösningar som förenklar IT. Vi tillhandahåller databaslösningar, anpassad utveckling, dynamiska datacenter, flexibel datoranvändning.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

Gäller: 
Oracle Database – 12.1.0.2

Författare:

Mahesh Reddy M

Inledning:

Med Oracle Database 12c In-Memory får en enskild databas nu effektivt stöd för blandad arbetsbelastning och levererar optimala prestanda för överföringar samtidigt som den har stöd för analyser och rapportering i realtid. Med In-Memory aktiveras både DataMart- och informationslager för mer ändamålsenliga analyser, vilket ger slutanvändaren möjligheten att ställa flera företagsdrivande frågor på samma tid som det tar att bara ställa en. Med den här funktionen kan du spara kolumner, tabeller, partitioner och materialiserade vyer i minnet i kolumnformat, snarare än det typiska radformatet. In-Memory-kolumnlagring (IM Column Store) var den huvudsakliga funktionen i 12.1.0.2-korrigeringsuppsättningen.

Oracle Database 12c In-Memory-arkitektur:

Traditionellt lagras data endast i ROW-format, medan In-Memory-databasen lagrar data endast i kolumnformat. Därför har Oracle Database 12c stöd för dubbel formatarktitektur.
  1. När data begärs för åtgärder som inte är skrivskyddade (datamanipulering) laddas dessa data i traditionell Row Store (buffertcache)
  2. När data begärs för skrivskyddade åtgärder fylls de i i en ny In-Memory-kolumnlagring. Detta innefattar givetvis en omvandling av rad- till kolumnformat.
  3. När en överföring som innefattar inmatningar, uppdateringar eller borttagningar görs visas nya data omedelbart och samtidigt i både radlagringen och In-Memory-kolumnlagringen. Därför är båda lagringarna transaktionellt konsekventa
In-Memory-kolumnlagringen:

Database In-Memory använder en In-Memory-kolumnlagring som är en ny komponent i System Global Area (SGA), kallat In-Memory Area. Data i IM-kolumnlagring finns inte i det traditionella radformatet, utan använder istället ett nytt kolumnformat. IM-kolumnlagringen ersätter inte buffertcache, utan fungerar som ett tillägg, så att data nu kan lagras i minnet i både rad- och kolumnformat

In-Memory Area är en statisk pool i SGA, vars storlek kontrolleras av initieringsparametern INMEMORY_SIZE (standard 0). Den aktuella storleken på In-Memory Area visas i V$SGA

IM-kolumnlagring underordnas i två pooler:
  1. 1 MB pool – lagrar kolumnformaterade data
  2. 64 K pool – lagrar metadata om objekten.
Vi kan se det tillgängliga minnet som är tillgängligt i varje pool med följande fråga

SQL> välj * i v$inmemory_area;
 
POOL  ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_I
1MB POOL 2.5767E+11 2.3569E+11 DONE 1
64KB POOL 6.4408E+10  876347392 DONE 1
1MB POOL 2.5767E+11 2.3569E+11 DONE 2
64KB POOL  6.4408E+10 876347392 DONE 2
1MB POOL 2.5767E+11 2.3569E+11 DONE 3
64KB POOL 6.4408E+10 876347392 DONE 3
Tabell 1: tillgängligt minne i varje pool

Aktivera IM-kolumnlagring:

Som statisk pool träder ändringar i INMEMORY_SIZE-parametern inte i kraft förrän databasinstansen startas om. Detta påverkas eller kontrolleras inte heller av Automatic Memory Management (AMM). In-Memory Area måste ha en storlek på minst 100 MB.

sql> ALTER SYSTEM SET SGA_TARGET=500G SCOPE=SPFILE;
sql> ALTER SYSTEM SET INMEMORY_SIZE=300G SCOPE=SPFILE;
sql>SHUTDOWN IMMEDIATE;
sql>STARTUP;

ORACLE-instansen startas.

Totalt System Global Area 4.2950E+11 byte
Fast storlek 7 677 400 byte
Variabel storlek 2,0938E+10 byte
Databasbuffert 8,5899E+10 byte
Redo-buffert 529 190 912 byte
In-memory Area 3,2212 E + 11 byte
Databas har monterats.
Database har öppnats.

Vi kan se In-Memory-inställningar med följande fråga

SQL> SHOW PARAMETER INMEMORY

NAME                                     TYPE       VALUE
----------------------------------   -----------    -----
inmemory_clause_default                string
inmemory_force                         string       DEFAULT
inmemory_max_populate_servers          integer        1
inmemory_query                         string       ENABLE
inmemory_size                          biginteger    300G
inmemory_trickle_repopulate_servers_   integer       1
procent
optimizer_inmemory_aware               boolean      TRUE

Vi kan också konfigurera parametrar för inmemory_size på CDB- och PDB-nivå. Om du konfigurerar parametrar på PDB-nivå behöver instansen eller PDB inte startas om. Summan av alla PDB-värden är mindre än lika med CDB-värde.

Vi kan aktivera och inaktivera In-Memory-alternativ på PDB-nivå, så som visas nedan

Anslut till PDB och utför sedan nedan kommando

Inaktivera:

Ändra konfiguration för systeminställning inmemory_size=0; eller

Ändra återställning för systeminställningen inmemory_size;

Aktivera:

Ändra konfiguration för systeminställning set inmemory_size=20G;

Prioriteringsnivåer för In-Memory:

IM-kolumnlagring ska fyllas i med de mest prestandakritiska data i databasen. Mindre prestandakritiska data kan finnas i flashminne eller på disken med lägre kostnad. Om databasen är tillräckligt liten kan du givetvis fylla i alla tabeller i IM-kolumnlagringen. Databasens In-Memory lägger till ett nytt INMEMORY-attribut för tabeller och materialiserade vyer.

Vi kan aktivera INMEMORY-attribut på

Tabellutrymme, tabell, (under-)partition och materialiserad vy.

Om du aktiverar det här attributet på lagringsplatsnivå aktiveras alla tabeller och materialiserade vyer i lagringsplatsnivån som standard för IMCOLUMN-lagring.

ändra lagringsplatsuppgift INMEMORY;

om du aktiverar det här attributet på lagringsplatsnivå innebär det att alla tabellens kolumner ska fyllas i i IMCOLUMN-lagringen. Det är dock möjligt att endast fylla i underuppsättning i kolumner i IMCOLUMN-lagring.

Ändra table quest_tab INMEMORY NO Inmemory (EMP);

På liknande vis för uppdelad tabell

Ändra table quest_tab INMEMORY MODIFY Partition  quest_part_1 No Inmemory;

Bakgrundsprocesser:

IMCO: IMCO-bakgrundsprocessen initierar ifyllning (förifyllning) av In-Memory-aktiverade objekt med prioritering LOW/MEDIUM/HIGH/CRITICAL.

SMCO: SMCO skapar slavprocesser dynamiskt (Wnnn) för att implementera uppgifterna.

Wnnn: Wnnn-processer utför ifyllning och ifyllning en gång till för In-Memory-uppgifter för ifyllning eller ifyllning en gång till av In-Memory-aktiverade objekt.

Objekt fylls i i IM-kolumnlagringen antingen i en prioriterad lista direkt efter att databasen öppnas eller efter att de skannats (efterfrågats) första gången. Den ordning som objekt fylls i kontrolleras av NYCKELORDSPRIORITET, som har fem nivåer. Standardprioritet är INGEN, vilket innebär att objekt fylls i efter att de skannats första gången

Olika prioriteringsnivåer kontrolleras av delsatsen PRIORITET i delsatsen INMEMORY
Priority Level    Description

CRITICAL        Objekt fylls i omedelbart efter att databasen öppnas

HIGH                Objekt fylls i efter att alla CRITICAL-objekt har fyllts i                                             

MEDIUM          Objekt fylls i efter att alla CRITICAL- och HIGH-objekt har fyllts i

LOW                 Objekt fylls i efter att alla CRITICAL-, HIGH och MEDIUM-objekt har fyllts i

NONE              Objekt fylls endast i efter att de skannats första gången (standard)

 Objekt som är mindre än 64 KB fylls inte i i minnet, eftersom de tar upp en stor del av utrymmet i IM-kolumnlagringen eftersom minnet allokeras delar om 1 MB.

T.ex: ändra tabelluppgift med kritisk In-Memory-prioritet;

In-Memory-komprimeringsteknik:

IM-kolumnlagring använder särskilda komprimeringsformat som är optimerade för åtkomsthastighet snarare än minskning av utrymme. Databasen ökar hastigheten på följande sätt:
  • Med komprimeringsformat kan databasen minska andelen minne som bearbetas för vardera kolumn. SQL utförs direkt på de komprimerade kolumnerna.
  • Databasen använder instruktioner för SIMD-vektor (uppsättning) för att bearbeta uppsättningar av kolumnvärden som en enda CPU-klockcykel. Databasen kan lagra många olika värden i en vektor, vilket maximerar prestandafördelarna med SIMD-vektorbearbetning.
In-Memory-komprimering specificeras med nyckelordet MEMCOMPRESS, en delsats i INMEMORY-attributet. Det finns sex nivåer, där alla tillhandahåller olika nivåer av komprimering och prestanda.

No Memcompress: data fylls i i In-Memory utan komprimering.

Memcompress for DML: huvudsakligen för DML-prestanda och minimal komprimering.

Memcompress for Query Low: optimerat för Query-prestanda (standard).

Memcompress for Query High: optimerat för Query-prestanda och också utrymmesbesparande

Memcompress for Capacity Low: mer utrymmesbesparande jämfört med Query High och Low

Memcompress for Capacity High: optimerat för utrymmesbesparande och lite mindre prestanda.

Komprimeringsförhållanden kan variera från 2 x till 20 x, beroende på komprimeringsalternativ, datatyp och tabellinnehåll som har valts.

T.ex.: ändra tabelluppgift för In-Memory – Memcompress for Query High;

In-Memory-kolumnlagring på RAC:

I klustermiljön har varje nod egen kolumnlagring. Varje nod i klustret ska ha samma storlek för IM-kolumnlagring. Som standard distribueras alla objekt som fylls i minnet över alla IM-kolumnlagring i klustret. Distribution av objekt över IM-kolumnlagringar i ett kluster kontrolleras av två ytterligare delsatser i INMEMORY-attributet: DISTRIBUTE och DUPLICATE (endast tekniska system).

Distribution:

Objekten som är distribuerade över kluster kontrolleras av distribuerade delsatser. Du kan distribuera objekten på följande sätt

Distribuera genom radhantering – distribuera objekten genom rader till olika noder

Distribuera genom partition – distribuera partitioner till noder inom klustret

Distribuera genom delsatser – distribuera delpartitionen till olika noder.

T.ex: ändra tabelluppgift med distribution genom partition;

Här är det viktigt att uttrycka att Oracle In-Memory RAC är en Shared-Nothing-arkitektur för frågor. Dvs. att om du ställer en fråga gentemot In-Memory-data objekt (anta att objekt distribueras i två IM-kolumnlagringar), endast har åtkomst till data som finns i tillhörighetsnoden, så innebär det att IMCU:er (Inmemory Compression Units) mellan instanser i klustret inte delas.

Du kan konfigurera grader av parallellism (DOP) till AUTO. Den parallella frågekoordinatorn identifierar andra instanser av IMCU-platsen. Om du inte kan konfigurera DOP till AUTO använder inte den parallella frågekoordinatorn de andra IMCU-instanserna.

konfigurera grader av parallellism till auto

ändra systemkonfiguration parallel_degree_policy=AUTO scope=both sid='*';

Dubblett:

Öka tillgängligheten genom att kopiera objekt över alla instanser. Du kan använda den duplicerade delsatsen för att specificera att In-Memory-tabellen lagras i alla instanser inom klustret. För icke-tekniska system fungerar inte det här alternativet.

Ex. ändra tabelluppgift i In-Memory, duplicera alla;

       tabelluppgift lagras i alla instansen.

Övervaka In-memory-objekt:

För övervakning av In-Memory-objekt introducerar Oracle två nya V$views som är

v$IM_SEGMENTS eller v$IM_USER_SEGMENTS och v$IM_COLUMN_LEVEL.

Med de här vyerna kan vi ta reda på hur många objekt som för närvarande finns i IMCOLUMN-lagringen.

EX:

konfigurera linesize 256

konfigurera pagesize 999

välj segment_name,ROUND(SUM(BYTES)/1024/1024/1024,2) ”DATA GB”,

ROUND(SUM(INMEMORY_SIZE)/1024/1024/1024,2) ”IN-MEM GB”,

ROUND(SUM(BYTES-BYTES_NOT_POPULATED)*100/SUM(BYTES),2) ”% IN_MEM”,

ROUND(SUM(BYTES-BYTES_NOT_POPULATED)/SUM(INMEMORY_SIZE),2) ”COMP RATIO

från V$IM_SEGMENTS

grupp efter ägare, segment_name

ordna efter SUM(bytes) desc;

SEGMENT_NAME              ORIG GB     IN-MEM GB   % IN_MEM    COMP RATIO

H_LINEITEM                         317.27          68.2                88.77           4.13

H_PARTSUPP                         35.17        21.04                100             1.67

EX:

konfigurera linesize 256

konfigurera pagesize 999

konfigurera verifiering av

col OBJECT format a30

SELECT owner||'.'||table_name OBJECT,

inmemory INMEMORY,inmemory_priority PRIORITY,

inmemory_distribute DISTRIBUTE,inmemory_compression COMPRESSION,

inmemory_duplicate DUPLICATE

FROM all_tables

where owner='QUEST'

ORDER BY inmemory, owner||'.'||table_name;

OBJECT               INMEMORY   PRIORITY   DISTRIBUTE   COMPRESSION              DUPLICATE

H_NATION         ENABLED      CRITICAL          AUTO           FOR QUERY HIGH            NO DUPLICATE

H_REGION         ENABLED     CRITICAL          AUTO           FOR QUERY HIGH            NO DUPLICATE

H_CUSTOMER

H_SUPPLIER

  I exemplet ovan kan du notera att två av tabellerna ovan – kund och leverantör – inte har ett värde för kolumnen INMEMORY. INMEMORY-attributet är ett attribut på segmentnivå. Både kund och leverantör är uppdelade tabeller och logiska objekt. INMEMORY-attribut för dessa tabeller registreras på partitions- eller delpartitionsnivå i *_TAB_ (SUB) PARTITIONS.

Tre ytterligare kolumner – INMEMORY_PRIORITY, INMEMORY_DISTRIBUTE och INMEMORY_COMPRESSION – har också lagts till i *_TABLES-vyerna för att visa aktuella InMemory-attribut för vardera tabell.
Article Properties
Article Number: 000124827
Article Type: Solution
Last Modified: 21 Feb 2021
Version:  3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.