terça-feira, 17 de maio de 2011

Utilizando SQL Tunning Advisor com uma declaração Sql.

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 do banco de dados  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> @?/RDBMS\ADMIN\utlxplan.sql;
SQL> desc plan_table

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

3-Visualize  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> DECLARE
  l_sql  VARCHAR2(500);
  l_sql_tune_task_id  VARCHAR2(100);
  BEGIN
 l_sql := 'SELECT * FROM emp';
 l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
 sql_text=> l_sql,user_name => 'SCOTT',SCOPE =>   DBMS_SQLTUNE.scope_comprehensive,
 time_limit => 60,task_name => 'emp_tuning_task');
 DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
 END ; 
/
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> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name =>'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 => 'emp_tuning_task');
EXEC DBMS_SQLTUNE.resume_tuning_task (task_name => 'emp_tuning_task');

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

c-Redefinir uma tarefa de ajuste que permite que ele seja re-executada.
EXEC DBMS_SQLTUNE.reset_tuning_task (task_name => '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> SELECT DBMS_SQLTUNE.report_tuning_task('emp_tuning_task') AS recommendations
  2  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 => 'emp_tuning_task');
END;
/

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

Um comentário: