Calculando tempo no Oracle PL/SQL

[ad#texto]

Para quem já trabalhou ou trabalha com rotinas em PL/SQL que movimentam grande volume de dados e que tendem a serem lentas sabe que é importante uma gerar uma métrica para medir os tempos de trechos do seu código a fim de se identificar pontos de lentidão.

Para quem pensou que um trace resolveria isso vale lembrar que o trace via de regra coleta dados de iteração no banco de dados Oracle, como por exemplo, query´s, iterações de memória e outros detalhes não são rastreados pelo trace, daí a necessidade da própria rotina PL/SQL possuir ferramentas próprias para medir o tempo.

Abaixo temos uma função que retorna a quantidade de segundos que decorreram de um tempo inicial até um tempo final.

function difere_segundos(par_inicio in timestamp,  -- Timestamp definido antes de executar o trecho que se quer marcar o tempo
                         par_fim in timestamp)     -- Timestamp definido após executar o trecho que se quer marcar o tempo
         return number IS

var_segundos   number(15,6) := 0;

begin
 var_segundos := extract(day from (par_fim - par_inicio)) * 24 * 60 * 60 +
                 extract(hour from (par_fim - par_inicio)) * 60 * 60 +
                 extract(minute from (par_fim - par_inicio)) * 60 +
                 extract(second from (par_fim - par_inicio));

 return(var_segundos);
end;

A função acima recebe o tempo inicial e o tempo final e retorna a diferença em segundo de ambas, para utilizar basta coletar o tempo (em timestamp) do ponto inicial e no ponto final executar a função e você terá a diferença em ambos e poderá então demarcar os pontos de maior demora e que devem receber maior atenção na sua rotina PL/SQL.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.