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

Jak lze nakonfigurovat sadu databáze Oracle 12c In-Memory

Summary: Našim cílem je zjednodušit IT dodáváním řešení databází, vlastního vývoje, dynamických datových center a flexibilní výpočetní techniky.

This article applies to   This article does not apply to 

Symptoms

Platí pro: 
Databáze Oracle – 12.1.0.2

Autor:

Mahesh Reddy M

Úvod:

Díky zavedení sady databáze Oracle 12c In-Memory může nyní jedna databáze efektivně podporovat smíšená pracovní zatížení, poskytovat optimální výkon pro transakce a současně podporovat analýzu a hlášení v reálném čase. Sada In-Memory umožňuje datovým tržištím a skladům poskytovat více ad-hoc analytiky, a umožňuje tak koncovým uživatelům pokládat několik obchodních dotazů za stejnou dobu, jakou nyní trvá položit pouze jeden dotaz. Díky těmto funkcím můžete v paměti ukládat sloupce, tabulky, oddíly a materializovaná zobrazení ve formátu sloupců, nikoli v typickém formátu řádku. Úložiště sloupců In-Memory (úložiště sloupců IM) je hlavní funkcí sady oprav 12.1.0.2.

Architektura databáze Oracle 12c In-Memory:

Data se tradičně ukládají pouze ve formátu řádků, kdežto data databáze In-Memory se ukládají pouze ve formátu sloupců. Takže databáze Oracle 12c podporuje architekturu ve dvou formátech.
  1. Kdykoli jsou data vyžádána pro operace čtení/zápisu (manipulace s daty), načtou se do tradičního úložiště řádků (mezipaměť vyrovnávací paměti).
  2. Kdykoli jsou data vyžádána pro operace určené pouze ke čtení, importují se do nového úložiště sloupců In-Memory. Tento import samozřejmě zahrnuje transformaci z formátu řádku na formát sloupce.
  3. Pokaždé, když se potvrdí transakce zahrnující vložení, aktualizace nebo odstranění, nová data se okamžitě zobrazí v úložišti řádků i v úložišti sloupců In-Memory. Z tohoto důvodu jsou obě úložiště transakčně konzistentní.
Úložiště sloupců In-Memory:

Databáze In-Memory používá úložiště sloupců In-Memory, které je novou součástí oblasti SGA (System Global Area), nazývané oblastí In-Memory. Data ve sloupci IM se neukládají v tradičním formátu řádku, nýbrž v novém formátu sloupce. Úložiště sloupců IM nenahrazuje vyrovnávací paměť, slouží spíš jako doplněk, takže data lze nyní ukládat do paměti ve formátech řádku i sloupce.

Oblast In-Memory je statický fond v rámci oblasti SGA, jejíž velikost se řídí parametrem inicializace INMEMORY_SIZE (výchozí hodnota je 0). Aktuální velikost oblasti In-Memory je viditelná v části V$SGA.

Úložiště sloupců IM je rozděleno do dvou fondů:
  1. 1MB fond – Ukládá samotná data ve formátu sloupce.
  2. 64k fond – Ukládá metadata o objektech.
Pomocí níže uvedeného dotazu můžeme zobrazit dostupné množství paměti v každém fondu.

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
Tabulka 1: Paměť dostupná v každém fondu

Povolení úložiště sloupců IM:

Jelikož se jedná o statický fond, nebudou platné žádné provedené změny parametru INMEMORY_SIZE, dokud nerestartujete instanci databáze. Rovněž fond neovlivňuje ani neřídí funkce AMM (Automatic Memory Management). Oblast In-Memory musí mít minimální velikost 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 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.

Pomocí níže uvedeného dotazu můžete zobrazit nastavení In-Memory:

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

Parametr inmemory_size můžeme nastavit také na úrovni CDB a PDB. Pokud tento parametr nastavíte na úrovni PDB, není nutné restartovat instanci ani úroveň PDB. Součet všech hodnot PDB je stejný nebo menší než hodnota CDB.

Možnost In-Memory lze povolit nebo zakázat na níže uvedené úrovni PDB.

Připojte se k úrovni PDB a proveďte níže uvedený příkaz.

Deaktivace:

Alter system set inmemory_size=0; or

Alter system reset inmemory_size;

Aktivace:

Alter system set inmemory_size=20G;

Úrovně priority In-Memory:

Úložiště sloupců IM by mělo obsahovat nejdůležitější data v databázi. Méně důležitá data mohou být uložena na levnější jednotce flash nebo disku. Je-li databáze dostatečně malá, můžete všechny své tabulky samozřejmě importovat do úložiště sloupců IM. Databáze In-Memory přidává nový atribut INMEMORY pro tabulky a materializovaná zobrazení.

Atribut INMEMORY můžeme povolit

v tabulkovém prostoru, tabulce, (pod)oddílu a vyhodnoceném zobrazení.

Pokud tento atribut povolíte na úrovni tabulkového prostoru, budou ve výchozím nastavení pro úložiště IMCOLUMN povoleny všechny tabulky a materializovaná zobrazení v tabulkovém prostoru.

alter tablespace quest INMEMORY;

Pokud povolíte tento atribut na úrovni tabulky, všechny sloupce tabulky se importují do úložiště IMCOLUMN. Do úložiště IMCOLUMN je však možné importovat pouze podmnožinu sloupců.

Alter table quest_tab INMEMORY NO Inmemory (EMP);

Podobné je to i v případě tabulek s oddíly.

Alter table quest_tab INMEMORY MODIFY Partition  quest_part_1 No Inmemory;

Procesy na pozadí:

IMCO: Proces na pozadí IMCO iniciuje importování (předběžné importování) priorit LOW/MEDIUM/HIGH/CRITICAL do objektů aktivovaných v oblasti In-Memory.

SMCO: Proces SMCO dynamicky vytváří podřízené procesy (Wnnn) za účelem implementace těchto úloh.

Wnnn: Proces Wnnn zpracovává úlohy importu a opětovného importu objektů aktivovaných v oblasti In-Memory.

Objekty se importují do úložiště sloupců IM buď do seznamu priorit ihned po otevření databáze, nebo po prvním skenování (dotazu). Pořadí, ve kterém se objekty vyplňují, řídí klíčový parametr PRIORITY, který má pět úrovní. Výchozí parametr PRIORITY je NONE, což znamená, že objekt se vyplní pouze po prvním skenování.

Různé úrovně priority řízené podklauzulí PRIORITY klauzule INMEMORY.
Popis úrovně priority

CRITICAL – Objekt se vyplní okamžitě po otevření databáze.

HIGH – Objekt se vyplní po vyplnění všech objektů CRITICAL.                                             

MEDIUM – Objekt se vyplní po vyplnění všech objektů CRITICAL a HIGH.

LOW – Objekt se vyplní po vyplnění všech objektů CRITICAL, HIGH a MEDIUM.

NONE – Objekty se vyplní pouze po prvním skenování (výchozí nastavení).

 Objekty menší než 64 kB se neimportují do paměti, protože by zabíraly značné místo úložiště sloupců IM. Paměť se totiž přiděluje po 1MB úsecích.

Např.: alter table quest inmemory priority critical;

Techniky komprese In-Memory:

Úložiště sloupců IM používá speciální formáty komprese optimalizované pro rychlost přístupu, nikoli pro snížení kapacity úložiště. Databáze zvyšuje rychlost následujícími způsoby:
  • Formáty komprese umožňují databázi snížit množství zpracovávané paměti pro každý sloupec. SQL se provádí přímo v komprimovaných sloupcích.
  • Databáze používá k zpracování pole hodnot sloupce v jednom pracovním cyklu procesoru vektor SIMD (pole). Databáze může do vektoru ukládat mnoho hodnot. Ten maximalizuje výhody výkonu pomocí vektorového zpracování SIMD.
Komprese In-Memory je specifikována pomocí klíčového parametru MEMCOMPRESS, podklauzule atributu INMEMORY. K dispozici je šest úrovní, z nichž každá poskytuje jinou úroveň komprese a výkonu.

No Memcompress: Data se importují do oblasti In-Memory bez komprese.

Memcompress for DML: Je určena hlavně pro výkon DML a minimální kompresi.

Memcompress for Query Low: Optimalizována pro výkon dotazu (výchozí nastavení).

Memcompress for Query High: Optimalizována pro výkon dotazu a také šetří místo.

Memcompress for Capacity Low: Více úspory místa v porovnání s Query high a low.

Memcompress for Capacity High: Optimalizovaná pro úsporu místa a o trochu menší výkon.

Poměry komprese se mohou v závislosti na vybrané volbě komprese, typu dat a obsahu tabulky lišit od 2X do 20X.

Např.: alter table quest inmemory memcompress for query high;

Úložiště sloupců In-Memory v řadiči RAC:

V prostředí clusteru má každý uzel vlastní úložiště sloupců. Každý uzel v clusteru by měl mít stejnou velikost jako úložiště sloupců IM. Ve výchozím nastavení budou všechny objekty importované do paměti distribuovány ve všech úložištích sloupců IM v clusteru. Distribuce objektů napříč úložišti sloupců IM v clusteru je řízena dvěma dalšími podklauzulemi v atributu INMEMORY: DISTRIBUTE a DUPLICATE (pouze určené systémy).

Distribute:

Distribuci objektů v rámci clusteru řídí podklauzule DISTRIBUTE. Objekty můžete distribuovat následujícími způsoby:

Distribute by rowed range – Distribuuje objekty podle řádků na různé uzly.

Distribute by Partition – Distribuuje oddíly do uzlů v rámci clusteru.

Distribute by sub partition – Distribuuje pododdíly do různých uzlů.

Např.: alter table quest inmemory distribute by partition;

Je důležité zmínit, že řadič Oracle In-Memory RAC je architektura SN (shared-nothing) pro dotazy, tzn. pokud položíte dotaz na objekty dat In-Memory (předpokládá se, že objekty jsou rozložené do dvou úložišť sloupců IM), můžete získat přístup pouze k datům, která jsou uložena v uzlu afinity, takže nedochází ke sdílení jednotek IMCU (Inmemory Compression Units) napříč instancemi v clusteru.

Můžete tedy nastavit stupeň paralelizace (DOP) na hodnotu AUTO. Koordinátor paralelních dotazů identifikuje další instance umístění IMCU. Pokud nemůžete nastavit DOP na hodnotu AUTO, paralelní koordinátor dotazů nebude používat jiné instance jednotek IMCU.

Nastavte stupeň paralelizace na hodnotu auto.

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

Duplicate:

Pro zvýšení dostupnosti se objekty kopírují do všech instancí. Podklauzule Duplicate se používá k tomu, aby se tabulka In-Memory uložila do všech instancí v clusteru. U systémů, které k tomu nejsou speciálně určeny, tato možnost nebude fungovat.

Např.: alter table quest inmemory duplicate all;

       Tabulka Quest se uloží do všech instancí.

Monitorování objektů In-Memory:

Pro monitorování objektů In-Memory společnost Oracle představuje dvě nová zobrazení V$view:

v$IM_SEGMENTS či v$IM_USER_SEGMENTS a v$IM_COLUMN_LEVEL.

Pomocí těchto zobrazení můžeme zjistit, kolik objektů je aktuálně vloženo do úložiště IMCOLUMN.

Příklad:

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

Příklad:

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

  Ve výše uvedeném příkladu si můžete všimnout, že dvě tabulky – Customer a Supplier – nemají hodnotu pro sloupec INMEMORY. Atribut INMEMORY je atribut na úrovni segmentu. Customer a Supplier jsou tabulky rozdělené do oddílů, a tím pádem i logické objekty. Atribut INMEMORY pro tyto tabulky se zaznamená na úrovni oddílu nebo pododdílu v části *_TAB_ (SUB) PARTITIONS.

Do zobrazení *_TABLES byly přidány tři další sloupce (INMEMORY_PRIORITY, INMEMORY_DISTRIBUTE a INMEMORY_COMPRESSION), které označují aktuální atributy INMEMORY pro každou tabulku.
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.