Ola, Desde o Oracle 10g, os supervisores (advisors) sao ferramentas especializadas que ajudam o DBA a analisar o desempenho do banco de dados, identificar possiveis problemas e gargalos e ajustar os varios componentes do banco de dados. No artigo de Abril/2008 eu demonstrei atraves de exemplos praticos como fazer para o Oracle analisar instrucoes SQL especificas e sugerir recomendacoes para melhorar seu desempenho. Foi usado o Supervisor de Ajuste SQL (SQL Tuning Advisor) atraves da package DBMS_SQLTUNE. Agora irei abordar novamente o uso do DBMS_SQLTUNE so que, em vez de passar como parametro uma instrucao SQL para ser analisada, irei passar como parametro o SQL_ID de uma instrucao SQL que ja tinha sido executada anteriormente.C:\>sqlplus scott/tigerSQL*Plus: Release 11.2.0.1.0 Production on Seg Ago 8 09:01:22 2016Copyright (c) 1982, 2010, Oracle. All rights reserved.Conectado a:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> var id number;SQL> exec :id := 2500;Procedimento PL/SQL concluido com sucesso.SQL> select count(*) from t1 where id=:id; COUNT(*)---------- 81 linha selecionada. Apos a execucao da instrucao SQL acima, irei procurar atraves da view dinamica de desempenho V$SQLAREA qual o SQL_ID associado a instrucao SQL executada. SQL> select sql_id,parsing_schema_name 2 from v$sqlarea 3 where sql_fulltext like 'select count(*) from t1 where id=:id%'; SQL_ID PARSING_SCHEMA_NAME------------- -------------------------1x6vk95kg44wb SCOTT1 linha selecionada.Uma vez encontrada o SQL_ID, irei criar uma tarefa de SQL Tuning passando o SQL_ID 1x6vk95kg44wb e executar a mesma conforme demonstrado a seguir. Para essa tarefa irei limitar a sua execucao ate o maximo de 5 minutos (300 seg).SQL> DECLARE 2 l_sql_tune_task_id VARCHAR2(100); 3 BEGIN 4 l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task ( 5 sql_id => '1x6vk95kg44wb', 6 scope => DBMS_SQLTUNE.scope_comprehensive, 7 time_limit => 300, 8 task_name => 'SCOTT_1x6vk95kg44wb', 9 description => 'SCOTT Tuning task for statement 1x6vk95kg44wb.'); 10 DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id); 11 END; 12 /l_sql_tune_task_id: SCOTT_1x6vk95kg44wbProcedimento PL/SQL concluido com sucesso.SQL> select task_id,task_name,status from user_advisor_log; TASK_ID TASK_NAME STATUS---------- ------------------------------ ----------- 33150 SCOTT_1x6vk95kg44wb INITIAL1 linha selecionada.SQL> exec dbms_sqltune.execute_tuning_task(task_name => 'SCOTT_1x6vk95kg44wb');Procedimento PL/SQL concluido com sucesso. Pronto. Apos a execucao sera necessario apenas analisar e verificar as recomendacoes que foram encontradas pelo otimizador. Vale a pena salientar que alem de ser mostrado a instrucao SQL, tambem sera mostrado o valor da bind variable usada na instrucao SQL.SQL> set long 1000000;SQL> set longchunksize 100000SQL> set pagesize 10000SQL> set linesize 1000SQL> select dbms_sqltune.report_tuning_task('SCOTT_1x6vk95kg44wb') as recomendacoes from dual;RECOMENDACOES--------------------------------------------------------------------------------GENERAL INFORMATION SECTION-------------------------------------------------------------------------------Tuning Task Name : SCOTT_1x6vk95kg44wbTuning Task Owner : SCOTTWorkload Type : Single SQL StatementScope : COMPREHENSIVETime Limit(seconds): 300Completion Status : COMPLETEDStarted at : 08/08/2016 09:13:45Completed at : 08/08/2016 09:13:56-------------------------------------------------------------------------------Schema Name: SCOTTSQL ID : 1x6vk95kg44wbSQL Text : select count(*) from t1 where id=:idBind Variables : 1 - (NUMBER):2500-------------------------------------------------------------------------------FINDINGS SECTION (2 findings)-------------------------------------------------------------------------------1- Statistics Finding--------------------- A tabela "SCOTT"."T1" nao foi analisada. Recommendation -------------- - Considere a coleta de estatisticas do otimizador para esta tabela execute dbms_stats.gather_table_stats(ownname => 'SCOTT', tabname => 'T1', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO'); Rationale --------- O otimizador requer estatisticas atualizadas para a tabela ao selecionar um plano de execucao adequado.2- Index Finding (see explain plans section below)-------------------------------------------------- O plano de execucao dessa instrucao pode ser melhorado com