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.