Exadata hibrid oszlopos adattömörítés automatizálása; DB 12c partition merge HOUG Konferencia 2017. március 28. Németh Márk Principal Programmer Analyst National Instruments
Tömörítési módok OLTP Exadata Hybrid Columnar Compression Elérhetőség 11gR1 11gR2 + Exadata A tömörítés egysége Adatbázis blokk (8k) compression unit (több blokk: 32-64k) Szervezési elv Sor Hibrid (sor és oszlop) Milyen műveletek esetén használható Hagyományos INSERT Tömörítési arány 2x - 4x 4x - 12x Update Ritkán vagy soha Soha EHCC-vel jelentősen magasabb tömörítési arány érhető el, de használatához direkt utas betöltés szükséges. Csak direkt utas betöltés (APPEND, CTAS) 2
A háttértörténet 2012 Adattárház migrációja Exadatára Alkalmanként használtunk EHCC-t Karbantartás jelleggel Egyedi SQL scriptek Felügyelet mellett Állásidő Megoldandó problémák Felügyeletet nem igénylő módon automatizálni Rendszeres időközönként futtatni (a táblatér soha ne hízzon túl nagyra) 3
Miért lett hirtelen ilyen fontos? Éles rendszer X2-2 Quarter Rack Fejlesztői és teszt X2-2 Half Rack 3 fejlesztői és 2 teszt rendszer A fejlesztői rendszereken kezdtünk kifutni a tárhelyből Két E-Business Suite (forrásrendszer) integrációja jelentős tárhelyigénnyel járt az adattárházon X6 csak később volt esedékes 4
Tömörítési arány és tárhelyigény 1,000 GB 800 GB Tömörítési arányok az NI-nál Tárhelyigény 1 TB tömörítetlen adatra vetítve 1,024 GB 13.0 X 14.0 X 12.0 X 10.0 X 600 GB 8.0 X 400 GB 200 GB 0 GB 2.7 X 1.0 X 384 MB 79 MB Uncompressed OLTP EHCC QH 6.0 X 4.0 X 2.0 X.0 X 5
Mit tömörítettünk? ETL Source systems Staging Area EDW Data Marts Landing layer Cleansed Layer Normalized Dimension al Perzisztens staging réteg A forrásrendszerrel megegyező táblaszerkezet + sorszíntű meta-adat Rekordok változásának követése időbélyeggel Csak INSERT műveletek Jelentős adatmennyiség Tökéletes jelölt a tömörítésre 6
Az eredeti particionálási stratégia Exadata migrációt megelőző megoldás Napi partíciók Az ETL nagymértékben kihasználja Az utolsó partíciót írja Az utolsó partíciót olvassa Ad-hoc lekérdezések a teljes táblára Problémák Tárhely: szerény tömörítési arány csak OLTP-vel o Kis batch-ekben töltjük o Hagyományos INSERT-ekkel Gyakran túl kicsi partíciók o Elpocsékolt tárhely ( initial 8k?) o Teher a data dictionary-nek is o SMART SCAN gyilkos 7
12c ALTER MERGE partitions 8
Az automatizált tömörítés 9
Partíciók összevonása egy táblában Range / interval partíciók Az interval particionálás a range particionálás kiterjesztése Legalább egy range partíció A legutolsó range partíció: transition point ALTER TABLE m_test MERGE PARTITIONS p_start TO p_end INTO PARTITION p_new; ALTER TABLE m_test MERGE PARTITIONS p1, p2, px INTO PARTITION p_new; 10
Range-interval átmenet (transition point) CREATE TABLE m_test( dt DATE,id NUMBER ) PARTITION BY RANGE(dt) INTERVAL(NUMTODSINTERVAL(1,'DAY')) (PARTITION p_init VALUES LESS THAN (DATE '2017-03-20') ); 11
Merge partition - példa ALTER TABLE m_test MERGE PARTITIONS FOR(DATE '2017-03-20') TO FOR(DATE '2017-03-23') INTO PARTITION p_1; 12
A hiányzó interval partíció okozta problémák ALTER TABLE m_test MERGE PARTITIONS FOR(DATE '2017-03-20') TO FOR(DATE '2017-03-23') INTO PARTITION p_1; ORA-02149: Specified partition does not exist ALTER TABLE m_test MERGE PARTITIONS FOR(DATE '2017-03-20'),FOR(DATE '2017-03-22'),FOR(DATE '2017-03-23') INTO PARTITION p_1; ORA-14274: partitions being merged are not adjacent 13
A range-interval átmenet áthelyezése ALTER TABLE m_test SET INTERVAL(); ALTER TABLE m_test SET INTERVAL(NUMTODSINTERVAL(1,'DAY')); 14
Mi történik, ha a tömörítés és a betöltés egymásra futnak? Tömörítés ALTER TABLE SET INTERVAL() Betöltés ALTER TABLE SET INTERVAL(1 Day) Resource busy INSERT INTO INSERT INTO (next day) Partition key does not map to any partition 15
DML error logging Hiányzó partíció esetén a rekordok az error táblába kerülnek Nehéz visszaállítani 16
Hogyan tegyük a két ALTER utasítást atomi műveletté? 1. ALTER TABLE m_test READ ONLY 2. ALTER TABLE m_test SET INTERVAL() 3. ALTER TABLE m_test SET INTERVAL(NUMTODSINTERVAL(1, DAY ) 4. ALTER TABLE m_test READ WRITE Így a betöltés hibával megáll (az error tábla használata helyett): ORA-12081: update operation not allowed on table "M_TEST"."M_TEST" A következő futásnál már működni fog, nincs teendő vele A tábla nem marad range particionált 17
Mi történik, ha a tömörítés és a betöltés egymásra futnak? Tömörítés Betöltés ALTER TABLE SET INTERVAL() Resource busy INSERT INTO ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired Megoldás: ALTER SESSION SET DDL_LOCK_TIMEOUT=300 18
Spatial adattípus SDO_GEOMETRY Az interval particionálás nem támogatja http://docs.oracle.com/database/121/sqlrf/statements_7002.ht m#sqlrf54559 Restrictions on Interval Partitioning... This clause is not supported for tables containing nested table columns, varray columns, or XMLType columns.... A CREATE TABLE mégis működik De az ALTER már nem 19
Spatial adattípus vs. Interval particionálás SQL> CREATE TABLE p_test ( SQL> SQL> SQL> SQL> ) rld DATE,id NUMBER,geometry mdsys.sdo_geometry SQL> TABLESPACE m_test SQL> PARTITION BY RANGE (rld) SQL> INTERVAL(NUMTODSINTERVAL(1,'DAY')) SQL> ( SQL> PARTITION p_init VALUES LESS THAN (DATE '2017-03-01') SQL> ); Table created. SQL> ALTER TABLE p_test SET INTERVAL(); Table altered. SQL> ALTER TABLE p_test SET INTERVAL(NUMTODSINTERVAL(1,'DAY')); ALTER TABLE p_test SET INTERVAL(NUMTODSINTERVAL(1,'DAY')) * ERROR at line 1: ORA-14769: cannot interval partition nested table or XMLType with object-relational storage SQL> 20
Egyéb megfontolások A táblatéren és a disk groupon lévő szabad hely nem ugyanaz CPU-intenzív művelet 2 TB ~ 6 óra 21
Eredmények Egyszeri tömörítés 2015-ben Automatizált megoldás 2016-ban 2,5 TB tárhely szabadult fel egyetlen rendszeren 2016 közepe óta Ez az összesen 6 (1 éles + 3 dev + 2 test) rendszer esetében már 15 TB Havonta fut Statisztikák: ~ 1300 tábla tömörítve ~ 650 esetében az adatbetöltések a mai napig futnak 20-30 perc futásidő havonta Teljesen automatikus Log táblákon is használjuk a módszert 22
Összegzés Az INSERT-only táblák a legalkalmasabb jelöltek a tömörítésre Interval particionálás 12c Partition merge OLTP és EHCC tömörítési módok vegyes használata DBMS_SCHEDULER (figyelembe véve, hogy CPU-intenzív) 3X (OLTP) -12X (EHCC) tömörítési arányok Komplikációk az interval partíciók összevonásával (Alter set interval) DDL lock vs. DML 23
Kérdések? 24