set 052014
 

Embora hoje em dia Storage não seja mais tão custoso, metas para diminuir a sua utilização sempre são direcionadas ao DBA.

Mas como diminuir utilização em disco ?
Ter um processo regular de expurgo é fundamental.

Mas se voce não tiver mais dados para apagar e tiver um monte de indices não utilizados ? Como saber quais você pode apagar ?

Isso é muito fácil pelo uso do mecanismo de monitoração de índices disponibilizado pela Oracle.

Ele deve ser usado sempre ? Não.

Tem suas limitações ? Sim, muitas.

Então quando ele deve ser usado ?

Vamos primeiramente começar falando de suas limitações:

  • Ele não mostra a quantidade de vezes que o índice foi usado. Se o índice foi usado uma ou mil vezes vai aparecer apenas como usado. Desta forma, se voce tem um índice que é usado pouquíssimas vezes, em queries que talvez não teriam sua performance afetada pela falta daquele índice, você vai ter dificuldade de identificá-los com essa monitoração
  • Ele não marca como usados aqueles índices que são usados por contraints ou por foreign keys.
  • Ele pode marcar como usado um índice ruim. Como assim ? Pense que você tem uma tabela com dois índices. Você tem um plano muito ruim com um dos indices da tabela, e esse é o plano usado pelo otimizador. A monitoração vai dizer que esse é o índice usado. Se voce se basear apenas nisso para apagar seus índices, você provavelmente ira apagar o outro índice da tabela, mas nesse caso esse índice era excelente, o problema é que o otimizador não estava usando seja por qual razão. Situações assim podem acontecer.

Dadas as limitações acima , onde provavelmente temos outras, qual seria então a melhor maneira de remover os indices ?
Olhando os índices existentes, os campos de tabela por tabela usados como filtros em consultas, índices usados por constraints e fks.
Não é fácil, leva tempo, mas é a maneira mais correta.

Agora se voce não tem o tempo necessário, você precisa correr, tem um bom ambiente de testes para simular as situações de produção, nesse caso a monitoração de indices fornecida pela Oracle pode te ajudar.

Vamos lá, mas como ativar a monitoração ?

    
SQL> alter index TEST_INDEX monitoring usage;

Index altered.
 

É muito fácil.

Para validar se a monitoração esta rodando:


SQL> select table_name,index_name,monitoring,used from v$object_usage;

TABLE_NAME		       INDEX_NAME		      MON USE
------------------------------ ------------------------------ --- ---
TEST_TABLE		       TEST_INDEX		      YES NO
 

A monitoração esta rodando, mas ele ainda não foi usado.
Vamos agora usar esse índice e ver o resultado:

    
SQL> select * from TEST_TABLE where COLUMN_1=1;

 COLUMN_1	COLUMN_2
---------- ----------
	 1
	 1	    2
 
SQL> select table_name,index_name,monitoring,used from v$object_usage;

TABLE_NAME		       INDEX_NAME		      MON USE
------------------------------ ------------------------------ --- ---
TEST_TABLE		       TEST_INDEX		      YES YES
 

Agora o índice esta marcado como usado.

Como desabilitá-lo ?
Muito fácil:

    
SQL> alter index TEST_INDEX nomonitoring usage;

Index altered.

SQL> select table_name,index_name,monitoring,used from v$object_usage;

TABLE_NAME		       INDEX_NAME		      MON USE
------------------------------ ------------------------------ --- ---
TEST_TABLE		       TEST_INDEX		      NO  NO

E se voce quiser habilitar a monitoração para todos os indices ?
Você pode fazer isso facilmente com esse bloco PL/SQL:

    
set pages 0
spool habilitar_monit.sql
select 'set echo on' from dual;
select 'alter index   ' || index_name || '  monitoring usage ;' 
from user_indexes
order by 1;
spool off

Vai utilizar a monitoração de índices fornecida pela Oracle ?
Não se esqueça das limitações. Também não se esqueça da sazonalidade da sua aplicação.
Pode ser que voce tenha um relatório crítico que rode apenas uma vez por mês, ele precisa dos indices e somente ele usa os indices de uma determinada tabela.
Se voce rodar a monitoração em apenas uma semana, e durante essa semana ele não rodar, vai dar que os indices não são usados.

Então tome cuidado e leve em conta as limitações da monitoração !

Boa monitoração !

 Leave a Reply

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=""> <s> <strike> <strong>

(required)

(required)