In articolul precedent am arătat cum se poate compresa o tabelă Oracle și spuneam că opțiunea de compresare a tabelelor a apărut o dată cu Oracle 9i dar până acum ceva timp nu a existat nici o opțiune de a compresa indecșii, această opțiune făcându-și apariția o dată cu Oracle 11g iar în ultima versiune a bazei  de date Oracle 12.1.0.2 iată  că a apărut o versiune îmbunătățită de compresare a indecșilor. Pentru a afla mai multe vă invit să mă urmăriți mai departe.

Am folosit aceeași tabelă ca în articolul precedent dar am căutat o coloană cu cât mai multe înregistrări duplicate pe care să o indexez.

SQL> select count(*) from (select distinct odate from test.no_compress);

  COUNT(*)
----------
     10000

Rezulta ca avem zece mii de înregistrări distincte din doua milioane, prin urmare va trebui să obținem o rată de compresie destul de mare. Pentru început creez indexul necompresat pentru a-l compara la sfârșit.

SQL> create index test.idx1 on test.no_compress(odate);

Index created.

Fără a intra prea mult în detalii, leaf-urile stochează valoarea indexului și corespondenta rowid-ului, compresând datele putem utiliza mai multe valori într-un leaf_block ceea ce ne permite sa utilizam mai puține leaf-uri.

SQL> select index_name,compression,leaf_blocks from dba_indexes where index_name = 'IDX1';

INDEX_NAME COMPRESSION   LEAF_BLOCKS
---------- ------------- -----------
IDX1       DISABLED             5306

Analizând statisticile indexului putem avea o valoare estimativă a factorului de compresie cat și procentul leaf-urilor care pot fi compresate:

SQL> validate index test.idx1;

Index analyzed.

SQL> select name,opt_cmpr_count,opt_cmpr_pctsave from index_stats where name = 'IDX1';

NAME       OPT_CMPR_COUNT OPT_CMPR_PCTSAVE
---------- -------------- ----------------
IDX1                    1               41

Necompresat indexul ocupă aproximativ 45 MB

SQL> SELECT segment_name,segment_type,bytes,extents FROM dba_segments where owner='TEST' and SEGMENT_TYPE='INDEX';

SEGMENT_NA SEGMENT_TYPE            BYTES    EXTENTS
---------- ------------------ ---------- ----------
IDX1       INDEX                45088768         58

Si repet procedura pentru același index dar de data aceasta compresat:

SQL> alter index test.idx1 rebuild compress advanced low;

Index altered.

SQL> select index_name,compression,leaf_blocks from dba_indexes where index_name = 'IDX1';

INDEX_NAME COMPRESSION   LEAF_BLOCKS
---------- ------------- -----------
IDX1       ADVANCED LOW         3093

Dacă initial leaf block-urile erau 5306 acum după compresie valoarea acestora s-a redus la 3093, rezultă o rată de compresie de 42%, adică foarte aproape de cat a fost estimat prin analiza indexului!

SQL> SELECT segment_name,segment_type,bytes,extents FROM dba_segments where owner='TEST' and SEGMENT_TYPE='INDEX';


SEGMENT_NA SEGMENT_TYPE            BYTES    EXTENTS
---------- ------------------ ---------- ----------
IDX1       INDEX                26214400         40

Dimensiunea a scăzut de la 43 MB la 26 MB, reducându-se cu 40 de procente.

Sper că am reușit să trezesc măcar puțin interesul pentru a explora una dintre cele mai interesante opțiuni disponibile în 12.1.0.2

2 comentarii

Lasă un răspuns

Completează mai jos detaliile cerute sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare /  Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare /  Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare /  Schimbă )

Conectare la %s

Enmotech Blog

Specialized in Oracle Cloud Database ( DBaaS )

Mathijs Bruggink

Tips Tricks and Blogs on Oracle

Oracle Romania

Simplify IT

Programat in Romania

Blogul industriei de software din Romania. Comunitate dezvoltatori

Dan Bârsan

The miracle is not that we do this work, but that we are happy to do it. I'm writing in Romanian and English

Romanian Oracle User Group

Focusing On Oracle Database Administration

Big Lazy SysAdmin

Adapt. Enjoy. Survive.

Talip Hakan Ozturk's ORACLE BLOG

The secret of success is at your fingertips!...

Pickleball spielen

002 - License to dink

Enmotech Blog

Specialized in Oracle Cloud Database ( DBaaS )

Mathijs Bruggink

Tips Tricks and Blogs on Oracle

Oracle Romania

Simplify IT

Programat in Romania

Blogul industriei de software din Romania. Comunitate dezvoltatori

Dan Bârsan

The miracle is not that we do this work, but that we are happy to do it. I'm writing in Romanian and English

Romanian Oracle User Group

Focusing On Oracle Database Administration

Big Lazy SysAdmin

Adapt. Enjoy. Survive.

Talip Hakan Ozturk's ORACLE BLOG

The secret of success is at your fingertips!...

Pickleball spielen

002 - License to dink

%d blogeri au apreciat: