Pular para o conteúdo

Fóruns Banco de dados Oracle Ajuda com analise de trace Ajuda com analise de trace

#105055
Fábio Prado
Participante

    Everson,

    Eu respondi correndo e agora eu vi que eu realmente havia respondido errado, portanto, para compensar vou dar uma explicação adicional.

    Toda instrução SQL, pode ser executada internamente no BD em até 3 passos (parse, execute e fetch), mas apenas 2 são obrigatórios (parse e execute) para toda instrução SQL.

    O parse é uma fase da execução em que o Otimizador do Oracle analisa basicamente a sintaxe e a semântica da instrução SQL e monta um plano de execução para ela.

    O execute é a fase em que o Otimizador realmente executa a instrução SQL, conforme “plano de execução” montado no estágio anterior.

    O fetch é a fase em que o Otimizador retorna os dados para a sessão de usuário e isso só acontece em instruções SELECT, por isso essa fase não é executada, por exemplo, em instruções INSERT, UPDATE e DELETE.

    Quando vc executa uma instrução SQL, dependendo do modo que ela foi executada, ela pode ter 1 ou N parses. O ideal e mais performático é que aconteça o menor número possível de parses, ou seja, apenas 1. Se vc por exemplo, executar uma instrução SELECT contendo uma variável bind, 15 vezes, ela poderá ter apenas 1 parse, 15 executes e 15 fetchs. Normalmente a qtde de executes e fetchs são iguais em instruções SQL e é isso que sempre vejo ocorrer. Quando vc vê no trace um bloco em que a qtde de fechs e executes são diferentes, é pq vc está vendo uma seção de agrupamento de valores de várias instruções SQL, ok?

    Segue abaixo um exemplo de trace em que eu executei 5 vezes a instrução “SELECT * FROM HR.EMPLOYEES WHERE ROWNUM < 8":

    Interpretando o trace acima e respondendo as suas questões:

    1- se eu quero saber quantas vezes a instrução SQL foi executada é só verificar o valor da coluna count na linha Execute.

    2- se eu quiser saber o tempo total de execução (considerando fetch + execute + parse), é só dividir o valor da coluna “elapsed” na linha total pelo valor da coluna “count “na linha execute.

    Agora respondi sua questão? Na próxima, para facilitar, acrescente também a instrução SQL para ficar mais fácil de interpretar.

    []s

    Fábio Prado
    http://www.fabioprado.net