SQL> show userUSER is „SCOTT“SQL> create table test as select * from all_objects;Table created.Vytvořili jste tabulku test, která je kopii tabulky all_objects. Teď nad ní vytvořte jednoduchý index. Strukturu tabulky si vypíšete příkazem desc test. Sloupec, nad kterým budete vytvářet index se jmenuje object_id a je číselného typu.SQL> create index testidx on test(object_id);Index created.Prostředí je připravené. Nyní musíte spustit monitorování indexu. K tomu slouží volba monitoring usage. Naopak pro vypnutí monitoringu slouží přepínač nomonitoring usage. SQL> alter index TESTIDX MONITORING usage;Index altered.Monitorování indexu je zapnuté, teď tedy zkuste udělat dotaz nad danou tabulkou, abyste použili index. Zda byl index použit zjistíte výpisem spouštěcího plánu. K tomu můžete použít parametr Set autotrace on explain v sqlplus, který zajistí výpis spouštěcího plánu. K tomu samému účelu vám slouží i skript utlxpls.sql. SQL> Set autotrace on explainSQL> select count(*) from test where object_id=5;COUNT(*)———-0Execution Plan———————————————————-Plan hash value: 121734241—————————————————————–| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |—————————————————————–| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 || 1 | SORT AGGREGATE | | 1 | 13 | | ||* 2 | INDEX RANGE SCAN| TESTIDX | 1 | 13 | 1 (0)| 00:00:01 |—————————————————————–Predicate Information (identified by operation id):—————————————————2 – access(„OBJECT_ID“=5)Z výpisu je patrné, že byl využit index testidx.Poznámka:Při použití skriptu utlxpls.sql je potřeba definovat pro který dotaz se má spouštěcí plán připravit. Tento způsob se používá u složitých a dlouhých dotazu. Jakmile, je dotaz přeložen stačí jej jen vypsat pomocí zmíněného skriptu a získáte ten samý výstup jako při použití nastavení v sqlplus. SQL> EXPLAIN PLAN FOR select count(*) from test where object_id=5;Explained.SQL> @$ORACLE_HOME/rdbms/admin/utlxpls.sql…Posledním krokem je tedy zjištění zda byl index použit. Stačí k tomu jednoduchý dotaz do tabulky v$object_usage.SQL> select * from v$object_usage;INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING—————————— —————————— —TESTIDX TEST YES YES 10/28/2009 15:21:11Jak vidíte, index je využíván. V případě, že v tabulce v$object_usage nenaleznete hledaný index, je to dobrý kandidát na smazání. Sloupec end_monitoring je prázdný, protože se index stále monitoruje. Jakmile by jste monitoring vypnuli, bude zde uveden čas.Metalink:1033478.6 Script: To Monitor the Usage of Indexes203645.1 How to Monitor Index Usage?136642.1 Identifying Unused Indexes with the ALTER INDEX MONITORING USAGE Command



Komentáře