Adatbázisok elmélete. Egy kísérlet az OLTP és az analitikus jellegű adatbázishasználat kombinálására: Oracle Database12c In-Memory

Hasonló dokumentumok
Valós idejű megoldások: Realtime ODS és Database In-Memory tapasztalatok

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

INDEXSTRUKTÚRÁK III.

Indexek és SQL hangolás

Exadata hibrid oszlopos adattömörítés automatizálása; DB 12c partition merge

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Hozzunk ki többet abból amink van. Fehér Lajos

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

B I T M A N B I v: T M A N

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

SQLServer. SQLServer konfigurációk

Adatbázisok* tulajdonságai

Készítette: Szabóné Nacsa Rozália

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

2011. November 8. Boscolo New York Palace Budapest. Extrém teljesítmény Oracle Exadata és Oracle Exalogic rendszerekkel

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Tranzakciókezelés PL/SQL-ben

Exadata, a világ leggyorsabb adatbázisgépe

Betekintés az SQL hangolásba Oracle környezetben

TABLE ACCESS FULL HASH CLUSTER BY INDEX ROWID BY USER ROWID BY GLOBAL INDEX ROWID BY LOCAL INDEX ROWID

Adatbázis-kezelés. Harmadik előadás

BEVEZETÉS Az objektum fogalma

Az Oracle rendszer komponensei

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Elemi alkalmazások fejlesztése IV.

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatbázis használat I. 5. gyakorlat

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Analitikai megoldások IBM Power és FlashSystem alapokon. Mosolygó Ferenc - Avnet

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Oracle E-Business Suite üzemeltetés a Rába Járműipari Holding Nyrt.-nél

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Adatbázisok elmélete 9. előadás

Adatbázis kezelés Delphiben. SQL lekérdezések

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázis rendszerek SQL nyomkövetés

Bevezetés: az SQL-be

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Adatbázis, adatbázis-kezelő

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

Az SQL*Plus használata

Adatbázisok elmélete 9. előadás

SQL parancsok feldolgozása

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Weblog elemzés Hadoopon 1/39

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

Adatbázis Rendszerek II. 2. Gyakorló környezet

SQLServer. DB Recovery modes

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Adattárházak 2015-ben kiterjesztés és gyorsulás: Big Data és a relációs világ, In-Memory, Exadata

Adatbázisok elmélete 10. előadás

Operációs rendszerek. UNIX fájlrendszer

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Spatial a gyakorlatban

GEIAL Kovács László. GEIAL Kovács László GEIAL Kovács László

LBRA6i integrált rendszer

Analitikus adatfeldolgozás. Adattárház Adatkocka Adatbányászat

SQL OLAP 2. óra. Multi-dimenzionális adatmodell. A normalizált relációs modell bonyolult a felhasználók számára

Oracle TTS migrációs technológia használata

Indexek, tömörítés és más állatfajták

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Oracle Active Data Guard

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Adatbázis-kezelés ODBC driverrel

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

SQL DDL-1: táblák és megszorítások

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Másolatképzési technikák és azok felhasználási lehetőségei

2007. február 25. TARTALOM

Döbrönte Zoltán. Data Vault alapú adattárház - Fél óra alatt. DMS Consulting Kft.

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

HA és DR praktikák, maximális rendelkezésreállás

EBS fogyókúra György Zoltán Innovent Tanácsadó Kft október 9.

Átírás:

Adatbázisok elmélete Egy kísérlet az OLTP és az analitikus jellegű adatbázishasználat kombinálására: Oracle Database12c In-Memory Kerepes Tamás Webváltó kft. tamas.kerepes@webvalto.hu 1/64

Relációs adatbázisok felhasználási területei Üzleti adatokat manapság leginkább adatbázisokban tárolunk Ha már adatbázisok, akkor az elmúlt kb. 30 évben a relációs adatbázisok dominálnak Az ilyen rendszereket kétféle környezetben használják: OLTP rendszerek Adattárházak, döntéstámogató rendszerek, analitikus jellegű rendszerek A valóság sohasem ilyen vegytiszta, hanem e kettő keveréke a gyakori A vegyes jellegű használat mindegyik ma használt rendszernél igen komoly kihívásokat jelent 2/64

Miért probléma a vegyes használat? Az OLTP rendszerekben a tranzakciókezelés van fókuszban, a konzisztencia, sok kicsi felhasználó egyidejű munkájának a hatékony elvégzése, a megbízható és flexibilis zárolások (pl. row level locking). Rengeteg kicsi tranzakció nyüzsög egymás mellett és érint kevés adatot. Az adattárházakban kevés felhasználó igen nagy adatmennyiséget kérdez le, vagy esetleg transzformál. A kihívás itt a lekéredzések párhuzamosítása, a hardver erőforrások minél jobb kihasználása, akár csak egy lekérdezés számára is. Kritikus a minél jobb végrehajtási terv. A két kaszt annyira eltérő, hogy mondhatni: ellehetetlenítik egymást. 3/64

Különbségek az Oracle adatbázisoknál OLTP rendszerek és adattárházak között Normalizáltság: OLTP: normalizált adatok Adattárházak: csillag (star) vagy hópehely (snowflake) modell Indexek: OLTP: B* fa szerkezetű indexek minden elsődleges és egyedi kulcs oszlopon, szinte minden külső kulcs oszlopon és azokon az oszlopokon, amelyek szerint gyakori a szűrés vagy összekapcsolás Adattárházak: bittérképes (bitmap) indexek, néha bitmap join indexek Származtatott értékek: OLTP: hacsak lehet, kerüljük a használatukat Adattárház: gyakori az összesített értékek tárolása materializált nézetek formájában 4/64

A klasszikus megoldás erre a problémára Külön OLTP adatbázisok és külön adattárház jellegű adatbázisok, noha mindkettő relációs Egyes gyártóknál ez külön termék is lehet: specializált adatbáziskezelő rendszer pl. adattárházak céljaira: célszoftver. Ilyen pl. a Terradata Másoknál ugyanazt a szoftvert használják mindkét területen, de másként konfigurálják őket. Ilyen pl. az Oracle RDBMS Folyamatos adat-áttöltések az OLTP adatbázisból az adattárházba: ETL folyamatok (Extraction, Transformation, Loading) Komoly probléma, hogy az adatelemzések nem valós idejű adatokkal történnek 5/64

Az Oracle megoldási kísérlete:oracle Database12c: In-Memory Előszóban: az In-Memory opció egy olyan lehetősége az Oracle12c adatbáziskezelő rendszernek, amelyben a táblák adatait az SGA-n belül egy új gyorsítóban, az In-memory Column Store-ban is tároljuk. Ott oszloponként és nem soronként. Mivel emellett még igen hatékonyan tömörítődnek is az így tárolt adatok, jelentősen lerövidül a lekérdezések válaszideje 6/64

Az In-Memory Column Store célkitűzései Szinte azonnal válaszidő a lekérdezésekre: A nagyon nagy táblák esetén a lekérdezések sokkal gyorsabbal (100x) A full scan, a Join és az aggregált adatok kiszámítása válnak gyorssá A lekérdezéseknek nem kell az index Analitikus feldolgozásokra ideális:kevés oszlop,sok sor Gyorsabb DML: mivel kevesebb az index (3-4x) Teljes mértékű transparencia az alkalmazásoknak Könnyű setup: In-memory column store konfiguráció Szegmens attribútumok IM column store Buffer cache 7/64

Egy kis architektúrai áttekintés Új memóriazóna az SGA-ban: In-Memory column store Azok a szegmensek, amelyek ide is bekerülnek, oszloponkénti formátumba konvertálódnak az IM Column Storeban Az In-Memory szegmensek értékei tranzakcionálisan konzisztensek a buffer cache tartalmával A merevlemezen továbbra is csak egy formátum: soronkénti tárolás Buffer cache EMP table ORDERS table ORDER DMLs In SGA Segments in row format In-memory column store Segments in columnar format ORDERS table Tables in dual format SELECT 8/64

Soronkénti /oszloponkénti tárolás: két dimenzióban mutatva SALES table order1 order2 order3 order4 col1: PRODID 123 357 50 243 col2: CUSTID ABC CDE GHI PQR PRODID CUSTID TIMEID CHANID QTT AMOUNT col3: TIMEID 04/02 12/05 06/17 05/24 row1 row2 row3 123 ABC 04/02 C1 12 3500 357 CDE 12/05 C4 1 2000 50 GHI 06/17 C1 5 4765 col4: CHANID col5: QTT C1 12 C4 1 C1 5 C2 9 row4 243 PQR 05/24 C2 9 1350 col6: AMOUNT 3500 2000 4765 1350 ROW store format Column store format 9/64

IMCU: In-Memory Compression Unit Columnar format SALES table 123:1,357:2,50:3,243:4\ABC:1,CDE:2,GHI:3,PQR:4\ 04/02:1,12/05:2,06/17:3,05/24:4\C1:1;3,C4:2,C2:4\ 12:1,1:2,5:3,9:4\3500:1,2000:2,4765:3,1350:4\ In-Memory Compression Units C1 C2 C3 C4 C5 C6 C1 C2 C3 C4 C5 C6 10/64

In-Memory Column Store Cache illetve Database Buffer Cache Tablespace IM column store Buffer cache Datafile Extent IMCU Segment IM Segment 8KB blocks SGA 11/64

Dual Format In Memory UPDATE SELECT Buffer Cache IM column store TX Journal INMEMORY_SIZE Threshold / low mem DBWn user IMCO SMCO Wnnn First data access or Instance startup SGA Row format CREATE TABLE INMEMORY ALTER TABLE INMEMORY 12/64

No More Indexek Issues Mely oszlopokat indexeljük? Without IM Column Store OLTP-ben: 1-3 Analitikus rendszerekben:10-20 Lassú lekérdezés ott, ahol nincs index Nehéz/lassú karbantartás a DML-ek során Nagy tárterület szükséges With IM Column Store Nincsenek többé analitikus célú indexek az in-memory táblákon Nemcsak az előre definiált, hanem az ad-hoc analitikus lekérdezések is gyorsak OLTP & batch összességében akár háromszor gyorsabb 13/64

Az IM Column Store technológia bevezetése (I) 1. Az adatbáziskezelő rendszer kompatibilitási verziója COMPATIBLE = 12.1.0.0.0 2. Az IM column store méretének a konfigurálása INMEMORY_SIZE = 100G 14/64

Az IM Column Store technológia bevezetése (2): objektumok beállításai 3. Lehetővé tenni az objektumok betöltődését: Egy egész szegmens szintjén: Az IMCU-k jellemzően a lekérdezések végrehajtásakor inicializálódnak és töltődnek fel. SQL> CREATE TABLE large_tab (c1 ) INMEMORY; Dual format SQL> ALTER TABLE t1 INMEMORY ; SQL> ALTER TABLE sales NO INMEMORY; Dual format Row format only SQL> CREATE TABLE countries_part... PARTITION BY LIST.. ( PARTITION p1.. INMEMORY, PARTITION p2.. NO INMEMORY); IMCU-k inicializálódhatnak adatbázis megnyitáskor is SQL> CREATE TABLE test ( ) INMEMORY PRIORITY CRITICAL; 15/64

Deploying IM Column Store: Columns Setting Enable/disable a subset of columns: SQL> CREATE TABLE myimtab (c1 NUMBER, c2 CHAR(2), c3 DATE) INMEMORY NO INMEMORY (c1); SQL> ALTER TABLE myimtab NO INMEMORY (c2); SQL> CREATE TABLE t (c1 NUMBER, c2 CHAR(2)) NO INMEMORY INMEMORY (c2); ORA-64361: column INMEMORY clause may only be specified for an inmemory table IM Column Store SELECT IMCUs populated C2 ABC CDE C3 10/05 04/02 MYIMTAB table Buffer Cache C1-C2-C3: 123 ABC 10/05 456 CDE 04/02 16/64

Mely objektumok lehetnek az IM Column Store-ban A DBA_TABLES nézet ezt is mutatja: SQL> SELECT table_name tab, inmemory_compression Comp, inmemory_priority Priority, inmemory_distribute RAC, inmemory_duplicate DUP FROM dba_tables; TABLE COMP PRIORITY RAC DUP ------ ----------------- ---------- ------------ -------------- TEST1 FOR QUERY HIGH NONE AUTO DUPLICATE ALL TEST2 NO MEMCOMPRESS CRITICAL AUTO DUPLICATE EMP FOR DML LOW BY PARTITION NO DUPLICATE NO MEMCOMPRESS: Not compressed FOR QUERY / FOR CAPACITY: Compressed NONE: Populated on demand Other values: Populated according to priority level AUTO: Object distributed by Oracle among the IM column stores of the RAC nodes BY PARTITION: The object is distributed by partitions among the RAC nodes DUPLICATE ALL DUPLICATE NO DUPLICATE 17/64

Mely oszlopok lehetnek az IM Column Store-ban A V$IM_COLUMN_LEVEL nézet mutatja ezt: SQL> SELECT obj_num, segment_column_id, inmemory_compression FROM v$im_column_level; In-memory columns overriding compression clause of the parent table obj_num segment_column_id inmemory_compression ---------- ----------------- -------------------------- 98202 1 DEFAULT In-memory columns of 98202 2 NO MEMCOMPRESS in-memory tables inheriting compression clause of the 98202 3 DEFAULT parent table 98202 4 NO INMEMORY Non in-memory columns in in-memory tables 18/64

IM Column Store prioritások A PRIORITY szabályozza, hogy kik kerüljenek be: SQL> CREATE TABLE t_low (code NUMBER) INMEMORY PRIORITY LOW; select from T_LOW select from T_MEDIUM select from T_HIGH IMCO SMCO Wnnn IM column store FULL T_MEDIUM T_CRITICAL T_HIGH Buffer cache T_LOW select from T_CRITICAL SQL> CREATE TABLE countries_part... PARTITION BY LIST.. ( PARTITION p1.. INMEMORY PRIORITY HIGH, PARTITION p2.. INMEMORY MEMCOMPRESS FOR CAPACITY LOW, PARTITION p3..,.. ); 19/64

Mely szegmensek kerültek be: Először még üres az IM column store: SQL> SELECT owner, segment_name name FROM v$im_segments WHERE segment_name = 'SALES'; Priority NONE No rows populated yet SQL> SELECT /*+ full(s) noparallel (s)*/ count(*) FROM sales s; A fenti lekérdezés után: SQL> SELECT segment_name, bytes, inmemory_size, bytes_not_populated FROM v$im_segments; SEGMENT_NAME BYTES INMEMORY_SIZE BYTES_NOT_POPULATED ------------ ------------ --------------- ------------------- SALES 228231 36299 0 BYTES BYTES in IM column store 20/64

IM Column Store tömörítés A MEMCOMPRESS szabályozza a tömörítési szintet SQL> CREATE MATERIALIZED VIEW mv1 INMEMORY NO MEMCOMPRESS; SQL> CREATE TABLE large_tab (c1 ) INMEMORY MEMCOMPRESS FOR QUERY; A merevlemezen több helyet foglal el: BYTES Compression Magasabb tömörítési szint: INMEMORY_ SIZE SQL> ALTER TABLE t1 INMEMORY MEMCOMPRESS FOR CAPACITY HIGH; SEGMENT_NAME BYTES INMEMORY_SIZE ------------ ----------- -------------- T1 11475615744 4664262656 No automatic repopulation 21/64

IM Column Store Compression Advisor Egyik Advisor a sokból. Azt elemzi, hogy mennyi memóriára van szükségünk a különböző MEMCOMRESS értékek esetén- BEGIN DBMS_COMPRESSION.GET_COMPRESSION_RATIO ( 'TS_DATA', 'SSB', 'LINEORDER', NULL, DBMS_COMPRESSION.COMP_INMEMORY_QUERY_LOW, blkcnt_cmp, blkcnt_uncmp, row_cmp, row_uncmp, cmp_ratio, comptype_str,10000,1); DBMS_OUTPUT.PUT_LINE('Block count uncompressed = ' blkcnt_uncmp); DBMS_OUTPUT.PUT_LINE('Row count per block uncompressed=' row_uncmp); DBMS_OUTPUT.PUT_LINE('Compression type = ' comptype_str); DBMS_OUTPUT.PUT_LINE('Comp ratio= ' cmp_ratio ); DBMS_OUTPUT.PUT_LINE(' '); DBMS_OUTPUT.PUT_LINE('The IM column store space needed is about 1 byte in IM column store for ' cmp_ratio ' bytes on disk.'); END; / 22/64

A tömörítési arány kiszámolása A V$IM_SEGMENTS nézetből nyerhető ki: SQL> SELECT segment_name, bytes Disk, inmemory_size, inmemory_compression COMPRESSION, bytes / inmemory_size comp_ratio FROM v$im_segments; OBJECT_NAME DISK INMEMORY_SIZE COMPRESSION COMP_RATIO ----------- --------- ------------- ------------------ ---------- SALES 212284915 200104115 FOR QUERY LOW 1.06 EMPLOYEES 3456956 17984 FOR CAPACITY HIGH 192.22 The highest, the best: 20 1 byte for 20 bytes The lowest, the worse: 1.06 23/64

Default In-Memory beállítások Az új táblák milyen attribútumokkal születnek: INMEMORY_CLAUSE_DEFAULT = "INMEMORY MEMCOMPRESS FOR QUERY LOW" SQL> CREATE TABLE a ( ); In-memory column store INMEMORY_CLAUSE_DEFAULT = "NO MEMCOMPRESS" SQL> CREATE TABLE a ( ) INMEMORY; SQL> CREATE TABLE b ( ); Buffer cache 24/64

INMEMORY öröklődési szisztéma Tablespace : DEFAULT INMEMORY / COMPRESS / PRIORITY attributes DBA_TABLESPACES All tables: INMEMORY / other COMPRESS / other PRIORITY Except NO INMEMORY tables DBA_TABLES All partitions : INMEMORY / other COMPRESS / other PRIORITY Except NO INMEMORY partitions DBA_PART_TABLES All columns : INMEMORY / other COMPRESS / other PRIORITY Except NO INMEMORY columns SQL> CREATE TABLESPACE IMCS DEFAULT INMEMORY MEMCOMPRESS FOR CAPACITY HIGH PRIORITY LOW; 25/64

Tennivalók a bevezetés után Eldobni az analitikus indexeket SQL> DROP INDEX i_sales_timeid PURGE; SQL> DROP INDEX i_sales_chanid PURGE; 26/64

Kipróbáljuk a lekérdezések felgyorsulását Ha az IM column store-ból fut: SQL> SET timing ON SQL> SELECT max(lo_ordtotalprice) most_expensive_order FROM lineorder; Elapsed: 00:00:01.80 Transparent for the application Ugyanez az adatblokk gyorsítóból: SQL> ALTER SESSION SET INMEMORY_QUERY="DISABLE"; SQL> SELECT max(lo_ordtotalprice) most_expensive_order FROM lineorder; Elapsed: 00:12:21.90 Use the INMEMORY_QUERY session parameter to execute the query against the buffer cache. 27/64

Lekérdezések egyszerű szűrési feltételekkel LO_ORDERKEY col1 LO_CUSTKEY col2 LO_REVENUE col4 450,500,, 357 / 10,20, 40,50 / / 900,,2500,, 9900 SQL> SELECT lo_orderkey, lo_custkey, lo_revenue FROM lineorder WHERE lo_orderkey = 357; IMCU pruning: use of MIN and MAX values stored in each IMCU IMCU1 IMCU2 Col1: 450-600 Col2: 10-30 Col3: A-J Col4: 900-1999 Col1: 301-500 Col2: 40-100 Col3: E-J Col4: 1000-10000 450 500 501 10 20 A J C 900 1000 990 301 357 500 40 50 F J E 1000 9900 2500 3000 28/64

MINMAX Pruning statisztikák MINMAX pruning történhet különböző WHERE feltételek esetén: SQL> SELECT display_name, value FROM v$mystat m, v$statname n WHERE m.statistic# = n.statistic# AND display_name IN ( 'IM scan segments minmax eligible', 'IM scan CUs pruned', 'IM scan CUs optimized read', 'IM scan CUs predicates optimized'); DISPLAY_NAME VALUE ----------------------------------- --------------------- IM scan segments minmax eligible 250 IM scan CUs pruned 249 IM scan CUs optimized read 0 IM scan CUs predicates optimized 249 29/64

Végrehajtási terv: TABLE ACCESS IN MEMORY FULL Executed in IM column store or in buffer cache? SQL> SELECT * FROM table(dbms_xplan.display_cursor()); ----------------------------------------------------- Id Operation Name ----------------------------------------------------- Executed in IM column store * 4 TABLE ACCESS INMEMORY FULL LINEORDER ----------------------------------------------------- Executed in IM column store Predicate Information (identified by operation id): --------------------------------------------------- 4 inmemory("lo_orderkey"=357) filter("lo_orderkey"=357) * 4 TABLE ACCESS FULL LINEORDER ----------------------------------------------------- cache 4 access (:Z>=:Z AND :Z<=:Z) filter("lo_orderkey"=357) Executed against buffer Executed against buffer cache 30/64

In-Memory táblák join műveletei Nagyságrendi különbségek a lekérdezések idejében: SQL> SELECT SUM(lo_extendedprice * lo_discount) revenue FROM lineorder l, date_dim d WHERE l.lo_orderdate = d.d_datekey AND l.lo_discount BETWEEN 2 AND 3 Compare AND l.lo_quantity performance < 24 with the same query against the buffer AND cache: d.d_date='december 24, 1996'; Elapsed: 00:00:00.28 SQL> SELECT SUM(lo_extendedprice * lo_discount) revenue FROM lineorder l, date_dim d WHERE l.lo_orderdate = d.d_datekey AND l.lo_discount BETWEEN 2 AND 3 AND l.lo_quantity < 24 AND d.d_date='december 24, 1996'; Elapsed: 00:02:28.85 31/64

DML-k és In-Memory Column Store Az In-Memory column store tartalma frissül a tranzakció végén SQL> SELECT display_name, value FROM v$mystat m, v$statname n WHERE m.statistic# = n.statistic# AND display_name like 'IM transactions%'; DISPLAY_NAME VALUE ------------------------------------ -------------------- IM transactions 1 IM transactions rows journaled 10224 Teljesen kompatibilis az OLTP-vel 32/64

Köszönöm a figyelmet A téma iránt érdeklődőket a következő címen várjuk: tamas.kerepes@webvalto.hu 33/64