Utilizando SQL Tunning  Advisor com uma declaração Sql.
Autor: Luciana Carvalho | Publicado: 2011-05-17T17:45:00-07:00

Ola Pessoal .....Belezinha..

Hoje irei dar uma dica rapída sobre o Assitente de Ajuste Sql ( SQL Tunning Advisor)
Ele é utilizado para ajudar os DBA`s a otimizar , e realizar ajustes nas querys&nbsp;do banco de dados&nbsp; e surgiu com a versão 10g do Oracle.
Lembre-se sempre pesquizem o material da Oracle para Mais informações.
Eu utilizei o Oracle 11g como ambiente de teste.
Referencias:http://www.oracle-base.com/articles/10g/AutomaticSQLTuning10g.php


Mãos a Obra ....

1-Executar o script para Criacao da tabela de Planos.
SQL&gt; @?/RDBMS\ADMIN\utlxplan.sql;
SQL&gt; desc plan_table

2-Executar explain de determinada declaração:
SQL&gt; SET TIMING ON -- Para verificarmos o tempo de execução
SQL&gt;explain plan SET STATEMENT_ID=’ID’ for Select * From scott.emp ; 
SQL&gt; SET TIMING OFF

3-Visualize&nbsp; as saida da tabela de planos com a o pacote dbms_xplan:
select * from TABLE(dbms_xplan.display);

4-Conceder privilégio para que um usuário possa utilizar o Advisor de Auste SQL

CONN sys/password AS SYSDBA
GRANT ADVISOR TO scott;
CONN scott/tiger

5-Criar uma tarefa para executar o Advisor

SQL&gt; DECLARE
&nbsp; l_sql&nbsp; VARCHAR2(500);
&nbsp; l_sql_tune_task_id&nbsp; VARCHAR2(100);
&nbsp; BEGIN
&nbsp;l_sql := 'SELECT * FROM emp';
&nbsp;l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
&nbsp;sql_text=&gt; l_sql,user_name =&gt; 'SCOTT',SCOPE =&gt;&nbsp;&nbsp; DBMS_SQLTUNE.scope_comprehensive,
&nbsp;time_limit =&gt; 60,task_name =&gt; 'emp_tuning_task');
&nbsp;DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
&nbsp;END ;&nbsp; 
/
PL/SQL procedure successfully completed.

6-Com a tarefa de ajuste definida o próximo passo é executá-lo usando o procedimento EXECUTE_TUNING_TASK:

SQL&gt; EXEC DBMS_SQLTUNE.execute_tuning_task(task_name =&gt;'emp_tuning_task');
PL/SQL procedure successfully completed.

Quick Tip:Durante a fase de execução você pode querer fazer uma pausa e reiniciar a tarefa, cancelar ou reiniciar a tarefa de permitir que ele seja re-executado

a-Interromper e retomar uma tarefa de afinação
EXEC DBMS_SQLTUNE.interrupt_tuning_task (task_name =&gt; 'emp_tuning_task');
EXEC DBMS_SQLTUNE.resume_tuning_task (task_name =&gt; 'emp_tuning_task');

b-Cancelar uma tarefa
EXEC DBMS_SQLTUNE.cancel_tuning_task (task_name =&gt; 'emp_tuning_task');

c-Redefinir uma tarefa de ajuste que permite que ele seja re-executada.
EXEC DBMS_SQLTUNE.reset_tuning_task (task_name =&gt; 'emp_dept_tuning_task');

7-O status da tarefa de ajuste pode ser monitorado usando a visão DBA_ADVISOR_LOG:

SELECT task_name, status FROM dba_advisor_log WHERE owner ='SCOTT';

8-Depois que a tarefa de ajuste foi executado com êxito as recomendações podem ser exibidas usando a função REPORT_TUNING_TASK:

SET LONG 10000;
SET PAGESIZE 1000
SET LINESIZE 200
SELECT DBMS_SQLTUNE.report_tuning_task('emp_tuning_task') AS recommendations FROM dual;
SET PAGESIZE 24
SQL&gt; SELECT DBMS_SQLTUNE.report_tuning_task('emp_tuning_task') AS recommendations
&nbsp; 2&nbsp; FROM DUAL;

9-Após a sessão de ajuste a tarefa de ajuste pode ser eliminada utilizando o procedimento DROP_TUNING_TASK:
BEGIN
DBMS_SQLTUNE.drop_tuning_task (task_name =&gt; 'emp_tuning_task');
END;
/

Bom Valeu ......Fiquem com Deus .