Dnes je: 21. května 2012

Ostatní

Autor knihy

Oracle Database 11g - Hotová řešení

Kdo je online

Právě připojeni - hostů: 18 

Přihlásit se




Monitorování indexu
Indexy se využívají pro rychlejší vyhledávání setříděných informací. Zjistíte-li například, že daný dotaz běží pomalu a navíc prohází celou tabulku tzv. full table scan, je nasnadě vytvořit nad sloupcem, který je v klauzuli where index. Vývojáři mají snahu dělat indexy nad všemi sloupci a to není dobře. Sice se vám zrychlí vyhledání, ale naopak se zpomalí vkládání. Dále je potřeba se o indexy starat, dělat rebuild indexu, to znamená aktualizovat informace a to stojí také nějaký výkon a čas. Z tohoto důvodu je dobré zkontrolovat, zda jsou jednotlivé indexy využívány a nebo jsou zbytečné. Jeden ze způsobů je zapnout monitoring problémového indexu. Vytvořte si testovací tabulku, naplňte ji daty a nad ní vytvořte index. Můžete využít již vytvořených tabulek ve schématu Scott.

SQL> show user
USER 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 explain
SQL> select count(*) from test where object_id=5;

COUNT(*)
----------
0

Execution 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:11


Jak 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 Indexes
203645.1 How to Monitor Index Usage?
136642.1 Identifying Unused Indexes with the ALTER INDEX MONITORING USAGE Command
 

Anketa

Využívají vaše databáze pro ukládání souborů ASM? (automatic storage management)
 

Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle

Partnerské internetové stránky:
www.oracledba.cz www.asktom.cz www.tomas-solar.cz