Warning: Declaration of Suffusion_MM_Walker::start_el(&$output, $item, $depth, $args) should be compatible with Walker_Nav_Menu::start_el(&$output, $item, $depth = 0, $args = Array, $id = 0) in /DISK2/WWW/plsql.cz/www/wp-content/themes/suffusion/library/suffusion-walkers.php on line 0
Oct 122011
 

Index je fantastická věc, pokud je správně použit, ale vcelku rychle se naopak může stát velkou brzdou při insertech, updatech i mazání. Mimo nutného udržování kondice indexů je občas dobré udělat nějakou analýzu využívání či nevyužívání indexů a přesvěčit se, zda stále benefit (sql selecty) převyšuje zpomalení (DML) a ostatní neduhy (maintenence, místo..), které index přinese. Oracle nám k tomu nabízí šikovný příkaz, který dokáže monitorovat indexy a  odhalit ty, které již nejsou používané a nebo ty, které nejsou používané, ale měli by být -Oracle je však nepoužívá – špatné exekuční plány, špatné outline, špatné hinty, neaktuální statistiky..

Hurá na ukázku monitorování indexů:

1) Nejprve si vytvoříme tabulku

CREATE TABLE tbl_index_test AS SELECT 1 myid,MOD(ROWNUM,100) myinx FROM DUAL CONNECT BY ROWNUM<200000;

2) Vytvoříme index

CREATE INDEX inx_test ON tbl_index_test(myinx) ONLINE;

3) Zapneme monitoring indexu inx_text

ALTER INDEX inx_test MONITORING USAGE;

4) Nyní vyzkoušíme select nad tabulkou bez použítí indexu

SELECT * FROM tbl_index_test;

5) Průběžný výsledek zapnutého monitorování lze nalést v v$object_usage pohledu

SELECT * FROM V$OBJECT_USAGE

INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
INX_TEST TBL_INDEX_TEST YES NO 10/12/2011 22:36:11 null

6) Nyní zkusíme náš index použít
SELECT /*+ index(t,inx_test) */ * FROM tbl_index_test t WHERE myinx=2;

A Oracle již ukazuje, že byl použit:

INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
INX_TEST TBL_INDEX_TEST YES YES 10/12/2011 22:36:11 null

Po analýze je samozřejmě nutné monitoring indexu vypnout – nebere to sice moc zdrojů, ale je dobré šetřit všude, kde se dá:

ALTER INDEX inx_test NOMONITORING USAGE;

INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
INX_TEST TBL_INDEX_TEST YES YES 10/12/2011 22:36:11 10/12/2011 22:57:45

Že se v v$object_usage index neobjeví, ještě nutně neznamená, že není třeba – je nutné počkat nějaký čas – alespoň jeden buisness cyklus, než lze přemýšlet o dropnutí indexu – může být využíván jednou za měsíc, za to může být pekelně důležitý – na to pozor. Je dobré také prohledat pohledy typu ALL_SOURCE na indexovaný sloupec, pokud je to možné -  čert ani člověk nikdy neví ;)

 Posted by at 21:13

 Leave a Reply

(required)

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>