Você tem que melhorar a performance de um SQL, mas não têm experiência suficiente para saber se um índice é necessário ou não, se precisa atualizar as estatísticas, ou renovar o plano de execução?
Seus problemas acabaram!
No Oracle 10g (mesmo o Express Edition) e 11g, você pode usar o SQL Adivisor.
Eu prefiro utilizar no SQL*Plus, e não no Enterprise Manager.
Primeiro, você irá precisar do SQL_ID que quer analisar. Você pode pega-lo da V$SQL com um SELECT como esse:
SQL> SELECT SQL_ID, SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE 'SELECT col1, col2 FROM tabela_gigante %';
Com o SQL_ID, execute estes procedimentos (troque o SQL_ID abaixo pelo que quer analisar):
DECLARE RET_VAL VARCHAR2(4000); BEGIN RET_VAL := DBMS_SQLTUNE.CREATE_TUNING_TASK(SQL_ID => 'gxtg1pzkt5fm5', SCOPE => DBMS_SQLTUNE.SCOPE_COMPREHENSIVE, TIME_LIMIT => 60, TASK_NAME => 'Portilho Tuning Task', DESCRIPTION => 'Portilho Tuning Task'); END; / EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK('Portilho Tuning Task'); SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('Portilho Tuning Task') RECOMMENTATION FROM DUAL; SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK('Portilho Tuning Task') RECOMMENTATION FROM DUAL;
Para excluir o Task:
EXEC DBMS_SQLTUNE.DROP_TUNING_TASK('Portilho Tuning Task');
Olá Ricardo,
Ficou bacana os post que publicou sobre performance no banco de dados, acho que as idéias que passou dá para clarear bastante quando se deparamos com esses tipos de problemas. Parábens. Continue mantendo esse nível.
Abraços,
Rodrigo Almeida