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

Oracle Database 12c:n In-Memory-ominaisuuden määrittäminen

Summary: Pyrimme tuottamaan ratkaisuja, jotka yksinkertaistavat IT-osaston työtä tarjoamalla tietokantaratkaisuja, mukautettua kehitystyötä, dynaamisia palvelinkeskuksia ja joustavaa tietojenkäsittelyä ...

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

Koskee seuraavia: 
Oracle Database 12.1.0.2

Tekijä:

Mahesh Reddy M

Johdanto

Oracle Database 12c:n uuden In-Memory-ominaisuuden avulla yksittäinen tietokanta voi tukea tehokkaasti monenlaisia työkuormia tarjoamalla optimaalisen suorituskyvyn tietojen muokkaamiseen ja tukemalla samalla reaaliaikaista analytiikkaa ja raportointia. In-Memoryn avulla tietovarastot ja niiden osajoukot voivat tuottaa lisää ad-hoc-analytiikkaa, sillä loppukäyttäjät voivat tehdä useita yrityksen toimintaa ohjaavia kyselyjä samassa ajassa, joka kuluu nykyään yhteen kyselyyn. Ominaisuuden ansiosta sarakkeet, taulukot, osiot ja materialisoidut näkymät voi tallentaa muistiin tavallisen rivimuodon sijasta sarakemuodossa. In-Memory Column Store (IM-sarakevarasto) oli 12.1.0.2-korjaustiedostosarjan tärkein ominaisuus.

Oracle Database 12c:n In-Memory-arkkitehtuuri:

Tiedot tallennetaan perinteisesti ainoastaan rivimuotoon, kun taas In-Memory-tietokantaan ne tallennetaan ainoastaan sarakemuodossa. Oracle Database 12c tukee siis kaksimuotoista arkkitehtuuria.
  1. Kun tietoja pyydetään luku-/kirjoitustoimintoja (tietojen muokkaamista) varten, ne ladataan perinteiseen rivivarastoon (puskurivälimuistiin).
  2. Kun tietoja pyydetään pelkkää lukua varten, ne ladataan uuteen In-Memory-sarakevarastoon. Tiedot muunnetaan tietysti ladattaessa rivimuodosta sarakemuotoon.
  3. Kun tietokantaan tehdään lisäyksiä, päivityksiä tai poistoja sisältävä tapahtuma, uudet tiedot ilmestyvät välittömästi ja samanaikaisesti sekä rivivarastoon että In-Memory-sarakevarastoon. Näin molempien varastojen tapahtumat pysyvät yhdenmukaisina.
In-Memory-sarakevarasto:

Databasen In-Memory-ominaisuus käyttää In-Memory-sarakevarastoa, joka on SGA:n (System Global Area) uusi In-Memory Area -nimellä kutsuttava osa. IM-sarakevaraston tiedot eivät ole perinteisessä rivimuodossa, vaan se käyttää uutta sarakemuotoa. IM-sarakevarasto ei korvaa puskurivälimuistia, vaan täydentää sitä, jotta tiedot voidaan tallentaa muistiin sekä rivi- että sarakemuodossa.

In-Memory Area on SGA:han sisältyvä kiinteä varanto, jonka kokoa hallitaan alustusparametrilla INMEMORY_SIZE (oletus on 0). In-Memory Arean kokoa voi tarkastella V$SGA-näkymässä.

IM-sarakevarasto on jaettu kahteen eri varantoon:
  1. 1 Mt:n varanto: säilyttää varsinaiset sarakemuotoon tallennetut tiedot
  2. 64 Kt:n varanto: säilyttää kohteiden metatiedot.
Kunkin varannon käytettävissä olevan muistin voi selvittää seuraavalla kyselyllä:

SQL> select * from 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
Taulukko 1: Varantojen käytettävissä oleva muisti

IM-sarakevaraston käyttöönotto:

Koska kyseessä on kiinteä varanto, INMEMORY_SIZE-parametriin tehdyt muutokset otetaan käyttöön vasta, kun tietokantaesiintymä käynnistetään uudelleen. AMM (Automatic Memory Management) -toiminto ei myöskään koske varantoa. In-Memory Arean koon on oltava vähintään 100 Mt.

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

ORACLE instance started.

Total System Global Area 4.2950E+11 bytes
Fixed Size 7677400 bytes
Variable Size 2.0938E+10 bytes
Database Buffers 8.5899E+10 bytes
Redo Buffers 529190912 bytes
In-Memory Area 3.2212E+11 bytes
Database mounted.
Database opened.

In-Memory-asetuksia voi tarkastella seuraavalla kyselyllä:

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

inmemory_size-parametrin voi määrittää myös CDB- ja PDB-tasoilla. Jos määrität parametrin PDB-tasolla, esiintymää tai PDB:tä ei tarvitse käynnistää uudelleen. Kaikkien PDB-arvojen summa on pienempi tai yhtä suuri kuin CDB-arvo.

In-Memory-ominaisuuden voi ottaa käyttöön tai poistaa käytöstä PDB-tasolla seuraavasti:

Muodosta yhteys PDB:hen ja suorita seuraava komento:

Poistaminen käytöstä:

Alter system set inmemory_size=0; tai

Alter system reset inmemory_size;

Käyttöönotto:

Alter system set inmemory_size=20G;

In-Memoryn prioriteettitasot:

IM-sarakevarastoon pitäisi tallentaa ne tietokannan tiedot, joiden suorituskyky on kaikista kriittisintä. Tietoja, joiden suorituskyky on vähemmän kriittistä, voi säilyttää edullisemmassa flash-muistissa tai levyllä. Jos tietokanta on tarpeeksi pieni, voit tietysti tallentaa myös kaikki taulukot IM-sarakevarastoon. Databasen In-Memory-ominaisuus lisää taulukoille ja materialisoiduille näkymille uuden INMEMORY-määritteen.

INMEMORY-määritteen voi ottaa käyttöön

taulukkotila-, taulukko-, (ali)osio- ja materialisoitu näkymä -tasoilla.

Jos otat määritteen käyttöön taulukkotilatasolla, kaikki taulukkotilan taulukot ja materialisoidut näkymät tallennetaan oletusarvoisesti IM-sarakevarastoon.

alter tablespace quest INMEMORY;

Jos otat määritteen käyttöön taulukkotasolla, kaikki taulukon sarakkeet tallennetaan IM-sarakevarastoon. IM-sarakevarastoon voi halutessaan tallentaa myös vain osan sarakkeista.

Alter table quest_tab INMEMORY NO Inmemory (EMP);

Saman voi tehdä myös osioidulle taulukolle.

Alter table quest_tab INMEMORY MODIFY Partition  quest_part_1 No Inmemory;

Taustaprosessit:

IMCO: IMCO-taustaprosessi käynnistää In-Memoryyn tallennettavaksi määritettyjen, LOW/MEDIUM/HIGH/CRITICAL-prioriteettitason kohteiden tallennuksen (esitallennuksen).

SMCO: SMCO luo dynaamisesti alisteisia prosesseja (Wnnn) suorittamaan nämä tehtävät.

Wnnn: Wnnn-prosessit suorittavat In-Memoryyn tallennettavaksi määritettyjen kohteiden tallennus- ja uudelleentallennustehtävät.

Kohteet tallennetaan IM-sarakevarastoon joko heti tietokannan avaamisen jälkeen prioriteettitason mukaan järjestettynä luettelona tai kun ne haetaan (niihin suoritetaan kysely) ensimmäistä kertaa. Kohteiden tallennusjärjestyksen määrää PRIORITY-avainsana, jolla on viisi eri tasoa. Oletusarvoinen PRIORITY-taso on NONE, mikä tarkoittaa, että kohde tallennetaan vasta, kun se haetaan ensimmäistä kertaa.

INMEMORY-lauseen PRIORITY-alilauseen hallitsemat prioriteettitasot:
Prioriteettitaso Kuvaus

CRITICAL Kohde tallennetaan heti, kun tietokanta avataan.

HIGH Kohde tallennetaan, kun kaikki CRITICAL-kohteet on tallennettu.                                             

MEDIUM Kohde tallennetaan, kun kaikki CRITICAL- ja HIGH-kohteet on tallennettu.

LOW Kohde tallennetaan, kun kaikki CRITICAL-, HIGH- ja MEDIUM-kohteet on tallennettu.

NONE Kohde tallennetaan vasta, kun se haetaan ensimmäistä kertaa (oletus).

 Alle 64 Kt:n kohteita ei tallenneta muistiin, sillä ne tuhlaisivat merkittävästi IM-sarakevaraston tilaa, joka on jaettu 1 Mt:n lohkoihin.

Esimerkki: alter table quest inmemory priority critical;

In-Memoryn pakkaustekniikat:

IM-sarakevarasto käyttää erityisiä pakkausmuotoja, jotka on optimoitu koon pienentämisen sijasta käytön nopeuttamiseen. Tietokanta nopeuttaa käyttöä seuraavilla tavoilla:
  • Pakkausmuodot auttavat tietokantaa pienentämään kunkin sarakkeen kohdalla käsiteltävää muistimäärää. SQL käyttää suoraan pakattuja sarakkeita.
  • Tietokanta käsittelee SIMD-vektorin käskyjen avulla joukon sarakearvoja yhdessä suorittimen kellojaksossa. Tietokanta voi säilyttää vektorissa useita arvoja, mikä maksimoi SIMD-vektorikäsittelyn suorituskykyedut.
In-Memoryn pakkaus määritetään avainsanalla MEMCOMPRESS, joka on INMEMORY-määritteen alilause. Pakkauksessa on kuusi eri tasoa, joilla on erilaisia vaikutuksia pakkaussuhteeseen ja käyttönopeuteen.

No Memcompress: tiedot tallennetaan In-Memoryyn ilman pakkausta.

Memcompress for DML: käytetään lähinnä DML:n nopeuttamiseen ja minimaaliseen pakkaukseen.

Memcompress for Query Low: optimoitu kyselyjen nopeuttamiseen (oletus).

Memcompress for Query High: optimoitu kyselyjen nopeuttamiseen ja tilan säästämiseen.

Memcompress for Capacity Low: säästää enemmän tilaa kuin Query High ja Query Low.

Memcompress for Capacity High: optimoitu tilan säästämiseen, jolloin käyttönopeus on hieman pienempi.

Pakkaussuhde voi vaihdella välillä 2 x–20 x valitusta pakkausasetuksesta, tietojen tyypistä ja taulukon sisällöstä riippuen.

Esimerkki: alter table quest inmemory memcompress for query high;

In-Memory-sarakevarasto RAC:ssä:

Klusteriympäristössä jokaisella solmulla on oma sarakevarasto. Klusterin kaikkien solmujen IM-sarakevarastojen on oltava samankokoisia. Muistiin tallennettavat kohteet jaetaan oletusarvoisesti klusterin kaikkien IM-sarakevarastojen kesken. Kohteiden jakamista klusterin IM-sarakevarastoihin hallitaan kahdella INMEMORY-määritteen alilauseella, DISTRIBUTE ja DUPLICATE (vain Engineered Systems -järjestelmät).

Distribute:

Distribute-alilause hallitsee tapaa, jolla kohteet jaetaan klusteriin. Kohteet voidaan jakaa seuraavilla tavoilla:

Distribute by rowid range: kohteet jaetaan eri solmuihin rowid-arvojen perusteella.

Distribute by partition: kohteet jaetaan eri solmuihin osioiden perusteella.

Distribute by sub partition: kohteet jaetaan eri solmuihin aliosioiden perusteella.

Esimerkki: alter table quest inmemory distribute by partition;

On tärkeää huomauttaa, että Oracle In-Memory RAC on kyselyjen suhteen ns. shared-nothing-arkkitehtuuri. Jos siis suoritat kyselyn In-Memory-tietokohteisiin (olettaen, että kohteet on jaettu kahteen IM-sarakevarastoon), voit käyttää ainoastaan affiniteettisolmun tietoja, sillä klusterin eri esiintymät eivät jaa In-Memory-pakkausyksiköitä.

Voit siis määrittää rinnakkaisuusasetukseksi AUTO. Rinnakkaisten kyselyjen koordinaattori tunnistaa In-Memory-pakkausyksiköiden muut esiintymät. Jos et voi määrittää rinnakkaisuusasetukseksi AUTOa, rinnakkaisten kyselyjen koordinaattori ei käytä muita In-Memory-pakkausyksiköiden esiintymiä.

Määritä rinnakkaisuusasetukseksi AUTO seuraavasti:

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

Duplicate:

Kohteet kopioidaan käytettävyyden parantamiseksi kaikkiin esiintymiin. Duplicate-alilauseella voit määrittää, että In-Memory-taulukko tallennetaan kaikkiin klusterin esiintymiin. Tämä vaihtoehto toimii ainoastaan Engineered Systems -järjestelmissä.

Esimerkki: alter table quest inmemory duplicate all;

       quest-taulukko tallennetaan kaikkiin esiintymiin.

In-Memory-kohteiden valvonta:

Oracle on lisännyt In-Memory-kohteiden valvontaa varten kaksi uutta V$-näkymää:

v$IM_SEGMENTS tai v$IM_USER_SEGMENTS ja v$IM_COLUMN_LEVEL.

Näissä näkymissä voi selvittää, kuinka monta kohdetta IM-sarakevarastossa parhaillaan on.

Esimerkki:

set linesize 256

set pagesize 999

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

from V$IM_SEGMENTS

group by owner,segment_name

order by 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

Esimerkki:

set linesize 256

set pagesize 999

set verify off

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

  Kahdella edellisen esimerkin taulukolla, Customer ja Supplier, ei ole arvoa INMEMORY-sarakkeessa. INMEMORY-määrite on segmenttitason määrite. Sekä Customer että Supplier ovat osioituja taulukoita, eli ne ovat loogisia kohteita. Näiden taulukoiden INMEMORY-määrite näkyy osio- tai aliosiotasolla *_TAB_ (SUB) PARTITIONS -näkymässä.

*_TABLES-näkymiin on lisätty myös kolme uutta saraketta – INMEMORY_PRIORITY, INMEMORY_DISTRIBUTE ja INMEMORY_COMPRESSION – ilmaisemaan kunkin taulukon In-Memory-määritteitä.
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.