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

Hvordan konfigurerer jeg alternativet for Oracle-database 12c In-Memory

Summary: Målet vårt er å levere løsninger som forenkler IT ved å tilby databaseløsninger, tilpasset utvikling, dynamiske datasentre og fleksibel databehandling

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

Gjelder for: 
Oracle-database – 12.1.0.2

Forfatter:

Mahesh Reddy M

Innledning:

Med Oracle-database 12c In-Memory kan én enkelt database nå effektivt støtte blandede arbeidsbelastninger og gi optimal ytelse for transaksjoner, samtidig som den støtter analyse og rapportering i sanntid. In-Memory gir både datatorg og datalagre mulighet til å levere mer adhoc-analyse, slik at sluttbrukere kan kjøre flere virksomhetsspørringer på like lang tid som det tar å kjøre bare én. Med disse funksjonene kan du lagre kolonner, tabeller, partisjoner og materialiserte visinger i et kolonneformat i minnet, i stedet for det vanlige radformatet. In-Memory-kolonnelageret (IM-kolonnelager) var den viktigste funksjonen i 12.1.0.2-oppdateringssettet.

Arkitektur for Oracle-database 12c In-Memory:

Vanligvis lagres data kun i et radformat, men en In-Memory-database lagrer data kun i kolonneformat. Derfor støtter Oracle-database 12c dobbel formatarkitektur.
  1. Når det blir bedt om data for lese-/skriveoperasjoner (datamanipuleringer), lastes dataene inn i det tradisjonelle radlageret (hurtigbuffer)
  2. Når det blir bedt om data for skrivebeskyttede operasjoner, fylles dataene ut i et nytt In-Memory-kolonnelager. Denne utfyllingen inkluderer selvfølgelig omforming fra radformat til kolonneformat.
  3. Når en transaksjon som inkluderer innsettinger, oppdateringer eller slettinger, blir igangsatt, vil de nye dataene vises umiddelbart og samtidig i både radlageret og In-Memory-kolonnelageret. Dette gjør at begge lagrene er konsekvente når det gjelder transaksjoner
In-Memory-kolonnelageret:

Database In-Memory bruker et In-Memory-kolonnelager, en ny komponent i System Global Area (SGA), som kalles In-Memory-området. Data i IM-kolonnelageret befinner seg ikke i det tradisjonelle radformatet, men bruker i stedet et nytt kolonneformat. IM-kolonnelageret erstatter ikke hurtigbufferen, men utfyller den. Dermed kan data nå lagres i minnet i både et radformat og i et kolonneformat

In-Memory-området er et statisk utvalg i SGA, og størrelsen på dette er kontrollert av initialiseringsparameteren INMEMORY_SIZE (standard 0). Gjeldende størrelse på In-Memory-området er synlig i V$SGA

IM-kolonnelageret er delt inn i to utvalg:
  1. 1 MB utvalg – lagrer de faktiske dataene i kolonneformat
  2. 64 k utvalg – lagrer metadata om objektene.
Vi kan se mengden tilgjengelig minne i hvert utvalg ved hjelp av spørringen nedenfor

SQL> select * from v$inmemory_area;
 
POOL  ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_I
1 MB POOL 2.5767E+11 2.3569E+11 DONE 1
64 KB POOL 6.4408E+10  876347392 DONE 1
1 MB POOL 2.5767E+11 2.3569E+11 DONE Andre
64 KB POOL  6.4408E+10 876347392 DONE Andre
1 MB POOL 2.5767E+11 2.3569E+11 DONE 3
64 KB POOL 6.4408E+10 876347392 DONE 3
Tabell 1: Tilgjengelig minne i hvert utvalg

Aktiver IM-kolonnelager:

INMEMORY_SIZE-parameteren er et statisk utvalg, så eventuelle endringer vil ikke tre i kraft før databaseforekomsten startes på nytt. Den blir heller ikke berørt eller kontrollert av automatisk minnehåndtering (AMM). Størrelsen på In-Memory-området må være 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-forekomsten er startet.

Totalt System Global Area 4,2950E+11 byte
Fast størrelse 7 677 400 byte
Variabel størrelse 2,0938E+10 byte
Databasebuffere 8,5899E+10 byte
Omgjøringsbuffere 529 190 912 byte
In-Memory-område 3,2212E+11 byte
Database montert.
Database åpnet.

Vi kan se In-Memory-innstillingene ved hjelp av spørringen nedenfor

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
percent
optimizer_inmemory_aware               boolean      TRUE

Vi kan også angi inmemory_size-parameteren på CDB- og PDB-nivå. Hvis du stiller denne parameteren inn på PDB-nivå, trenger du ikke starte forekomsten eller PDB på nytt. Summen av alle PDB-verdiene er mindre enn eller lik CDB-verdien.

Vi kan aktivere og deaktivere In-Memory-alternativet på PDB-nivå, som vist nedenfor

Koble til PDB, og kjør deretter kommandoen nedenfor

Deaktiver:

Alter system set inmemory_size=0; eller

Alter system reset inmemory_size;

Aktiver:

Alter system set inmemory_size=20G;

In-Memory-prioritetsnivåer:

IM-kolonnelageret skal fylles ut med de mest ytelseskritiske dataene i databasen. Mindre ytelseskritiske data kan ligge på en flash eller disk. Hvis databasen din er liten nok, kan du fylle ut alle tabellene i IM-kolonnelageret. Database In-Memory legger til et nytt INMEMORY-attributt for tabeller og materialiserte visninger.

Vi kan aktivere INMEMORY-attributtet på

tabellområde, tabell, (del)partisjon og materialisert visning.

Hvis du aktiverer dette attributtet på tabellområdenivå, blir alle tabeller og materialiserte visninger i tabellområdet aktivert for IMCOLUMN-lager som standard.

alter tablespace quest INMEMORY;

Hvis du aktiverer dette attributtet på tabellnivå, må alle kolonner i tabellen fylles ut i IMCOLUMN-lageret. Det er imidlertid mulig å bare fylle ut delsett av kolonnene i IMCOLUMN-lageret.

Alter table quest_tab INMEMORY NO Inmemory (EMP);

På samme måte for partisjonert tabell

Alter table quest_tab INMEMORY MODIFY Partition  quest_part_1 No Inmemory;

Bakgrunnsprosesser:

IMCO: IMCO-bakgrunnsprosessen starter utfylling (forhåndsutfylling) av aktiverte In‑Memory-objekter med LOW/MEDIUM/HIGH/CRITICAL (lav/middels/høy/kritisk) prioritet.

SMCO: SMCO starter slaveprosesser (Wnnn) dynamisk for å implementere disse oppgavene.

Wnnn: Wnnn-prosesser utfører oppgaver i minnet relatert til utfylling eller ny utfylling av In-Memory-aktiverte objekter.

Objekter fylles ut i kolonnelageret enten i en prioritert liste umiddelbart etter at databasen er åpnet, eller etter at de er skannet (spurt) for første gang. Utfyllingsrekkefølgen til objektene er kontrollert av nøkkelordet PRIORITY, som har fem nivåer. Standard PRIORITY er NONE, noe som betyr at et objekt bare fylles ut etter at det er skannet for første gang

Ulike prioritetsnivåer som kontrolleres av PRIORITY-delsetningen i INMEMORY-setningen
Prioritetsnivå    Beskrivelse

CRITICAL        (Kritisk) objektet fylles ut umiddelbart etter at databasen åpnes

HIGH                (Høy) objektet fylles ut etter at alle kritiske objekter er fylt ut                                             

MEDIUM          (Middels høy) objektet fylles ut rett etter at alle objekter med kritisk eller høy prioritet er fylt ut

LOW                 (Lav) objektet fylles ut rett etter at alle objekter med kritisk, høy eller middels prioritet er fylt ut

NONE              (Ingen) objekter fylles bare ut etter at de er skannet for første gang (standard)

 Objekter som er mindre enn 64 KB, fylles ikke ut i minnet ettersom minne blir tilordnet i blokker på 1 MB, og vil sløse mye plass i IM-kolonnelageret.

Eks: alter table quest inmemory priority critical;

In-Memory-komprimeringsteknikker:

IM-kolonnelageret bruker spesielle komprimeringsformater som er optimalisert for tilgangshastighet, i stedet for lagringsreduksjon. Databasen øker hastigheten på følgende måter:
  • Komprimeringsformatene gjør at databasen kan redusere mengden behandlet minne fra hver kolonne. SQL kjøres direkte på de komprimerte kolonnene.
  • Databasen bruker SIMD-vektorinstruksjoner (array) for å behandle et array av kolonneverdier i én enkelt CPU-klokkesyklus. Databasen kan lagre mange verdier i en vektor, noe som maksimerer ytelsesfordelene med SIMD-vektorbehandling.
In-Memory-komprimering blir spesifisert med nøkkelordene MEMCOMPRESS, en delsetnings av INMEMORY-attributtet. Det er seks nivåer, og hvert nivå gir forskjellige komprimerings- og ytelsesnivåer.

Ingen Memcompress: data fylles ut til In-Memory uten komprimering.

Memcompress for DML: hovedsakelig for DML-ytelse og minimal komprimering.

Memcompress for lav spørring: optimalisert for ytelsen til spørringer (standard).

Memcompress for høy spørring: optimalisert for ytelsen til spørringer og for å spare plass

Memcompress for lav kapasitet: mer plassbesparende sammenlignet med høy og lav spørring

Memcompress for høy kapasitet: optimalisert for å spare plass og litt mindre ytelse.

Komprimeringsforhold kan variere fra 2–20 X, avhengig av hvilket komprimeringsalternativ som er valgt, datatypen og innholdet i tabellen.

Eks: alter table quest inmemory memcompress for query high;

In-Memory-kolonnelager på RAC:

I et klyngemiljø har hver node sitt eget kolonnelager. Hver node i klyngen bør opprettholde samme størrelse som IM-kolonnelageret. Alle objekter som er fylt ut i minnet, vil som standard bli distribuert på tvers av alle IM-kolonnelagrene i klyngen. Distribusjonen av objekter på tvers av IM-kolonnelagrene i en klynge blir kontrollert av to ekstra delsetninger i INMEMORY-attributtet: DISTRIBUTE og DUPLICATE (kun utviklede systemer).

Distribusjon:

Objektene som distribueres på tvers av klyngen, kontrolleres av distribusjonsdelsetningen. Du kan distribuere objektene på følgende måter

Distribuering etter radområde – distribuerer objektene til ulike noder etter rad

Distribuering etter partisjon – distribuerer partisjonene til noder i klyngen

Distribuering etter delpartisjon – distribuerer delpartisjonen til ulike noder.

Eks: alter table quest inmemory distribute by partition;

Her er det viktig å si at Oracle In-Memory RAC er SN-arkitektur (shared-nothing) for spørringer, for eksempel hvis du oppretter en spørring mot In-Memory-dataobjekter (ta utgangspunkt i at objekter blir distribuert i to IM-kolonnelagre), og får kun tilgang til dataene i affinitetsnoden, dvs. deler ikke IMCU-ene (In-Memory-komprimeringsenheter) på tvers av forekomstene i klyngen.

Dermed kan du stille inn graden av parallellisme (DOP) til AUTO. Koordinatoren for den parallelle spørringen identifiserer den andre forekomsten av IMCU-plassering. Hvis du ikke kan stille inn DOP på AUTO, vil ikke koordinatoren for den parallelle spørringen bruke de andre forekomstene av IMCU-er.

still inn graden av parallellisme til auto

alter system set parallel_degree_policy=AUTO scope=both sid='*';

Duplikat:

Objektene blir kopiert til alle forekomster for å gjøre dem mer tilgjengelige. Du kan bruke den dupliserte delsetningen for å spesifisere at In-Memory-tabellen er lagret i alle forekomster i klyngen. Dette alternativet fungerer ikke for systemer som ikke er profesjonelt kontrollerte.

Eks: alter table quest inmemory duplicate all;

       oppgavetabellen er lagret i alle forekomster.

Overvåke In-Memory-objekter:

Oracle introduserer to nye V$-visninger for overvåking av In-Memory-objekter

v$IM_SEGMENTS eller v$IM_USER_SEGMENTS og v$IM_COLUMN_LEVEL.

Ved hjelp av disse visningene kan vi finne ut hvor mange objekter som er fylt ut i IMCOLUMN-lageret for øyeblikket.

EX:

angi linjestørrelse 256

angi sidestørrelse 999

velg 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"

fra V$IM_SEGMENTS

gruppe etter eier, segment_name

rekkefølge etter 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:

angi linjestørrelse 256

angi sidestørrelse 999

angi bekreftelse av

kolonneobjekt format a30

VELG owner||'.'||table_name OBJECT,

inmemory INMEMORY,inmemory_priority PRIORITY,

inmemory_distribute DISTRIBUTE,inmemory_compression COMPRESSION,

inmemory_duplicate DUPLICATE

FRA all_tables

der owner='QUEST'

REKKEFØLGE ETTER 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 eksemplet ovenfor vil du legge merke til at to av tabellene – Customer (Kunde) og Supplier (Leverandør) – ikke har en verdi for INMEMORY-kolonnen. INMEMORY-attributtet er et attributt på segmentnivå. Både Customer (Kunde) og Supplier (Leverandør) er partisjonerte tabeller, og er derfor logiske objekter. INMEMORY-attributtet for disse tabellene vil bli registrert ved partisjons- eller delpartisjonsnivået i *_TAB_ (SUB) PARTITIONS.

Tre ekstra kolonner – INMEMORY_PRIORITY, INMEMORY_DISTRIBUTE og INMEMORY_COMPRESSION – har også blitt lagt til i *_TABLES-visningene for å angi gjeldende In-Memory-attributter for hver 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.