Olá pessoal!

Existem algumas formas de se analisar os scripts submetidos ao banco de dados Oracle quanto a sua performance.  Uma dessas formas é através de uma view do esquema SYS chamada V_$SQLAREA, ou através do sinônimo público V$SQLAREA que está setado para a tabela.

Bom, de qualquer forma, nesse objeto existem informações interessantes para o acompanhamento dos scripts submetidos ao servidor de banco, mesmo que eles não tenham sido concluídos com sucesso.

A consulta é a seguinte:

SELECT *
  FROM (  SELECT ROUND ( ( (cpu_time / 1000000) / 60), 2) AS "Tempo total de CPU",
                 executions AS "Quant. exec.",
                 rows_processed AS "Quant. linhas proc.",
                 disk_reads AS "Leituras no disco",
                 first_load_time AS "Primeira utilização",
                 last_load_time AS "Última utilização",
                 parsing_schema_name AS "Usuário analisado",
                 sql_text AS "SQL exec."
            FROM v$sqlarea
           WHERE parsing_schema_name NOT IN ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
        ORDER BY 1 DESC)
 WHERE ROWNUM <= 10;

Nesse caso, a seleção da consulta mais externa (cláusula where) faz com que o retorno sejam de apenas os 10 scripts com maior tempo total de CPU (garantido no sort da consulta interna), mas podemos alterar esse valor ou retirar a condição. Na seleção da consulta mais interna, retirei os usuários de controle do DBA e do próprio SGBD Oracle, para que a análise possa ser feita apenas por aplicações e pessoas.

Vou explicar rapidamente as informações da projeção (cláusula select):

"Tempo total de CPU" – nesse “campo” é retornado o tempo total de CPU gasto para executar todas as vezes o script em questão. Fiz uma continha para exibir o tempo em minutos;

"Quant. exec" – nesse “campo” é retornado a quantidade de vezes que o SQL em questão foi executado desde sua primeira vez que foi submetido;

"Quant. linhas proc." – nesse “campo” é exibido a quantidade total de linhas processadas em todas as execuções da SQL em questão;

"Leituras no disco" – nesse “campo” é retornado a quantidade total de leituras realizadas no disco;

"Primeira utilização" – informa a data e hora da primeira utilização da SQL em questão, ou pelo menos a mais recente das “primeiras vezes”;

"Última utilização" – informa a data e hora da última utilização da SQL em questão;

"Usuário analisado " – informa qual o usuário da instância Oracle que realizou a SQL;

"SQL exec." – informa o script SQL submetido.

Grande abraço e até a próxima!!