Monitorar procedure runtime

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal,

Preciso monitorar por procedure das procedures de carga em tempo de execução e através de uma tabela de parâmetros com tempo limite definir que aquela procedure ultrapassou o tempo e assim enviar e-mail sobre isso.



Segue o SQL que salva os logs das procedures:

Selecionar tudo

select t_min.procedure_dsc,
        t_min.min_dt_update,
        t_max.max_dt_update,
        to_number(trim(to_char((t_max.max_dt_update - t_min.min_dt_update) * 1440,
                               '9999.99'))) Tempo_Minutos,
        to_number(trim(to_char((t_max.max_dt_update - t_min.min_dt_update) * 1440 / 60,
                               '9999.99'))) Tempo_Horas
   from (select t.procedure_dsc, min(t.dt_update) min_dt_update, t.usr_update
           from temp_carga t
          group by t.procedure_dsc, t.usr_update) t_min,
        (select t.procedure_dsc, max(t.dt_update) max_dt_update, t.usr_update
           from temp_carga t
          group by t.procedure_dsc, t.usr_update) t_max
 where t_min.procedure_dsc = t_max.procedure_dsc
    and t_min.usr_update = t_max.usr_update
 order by t_min.min_dt_update
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi Mariogus,

Qual seria especificamente a sua dúvida?

Se efetivamente é saber quando a procedure ultrapassou o tempo, você pode tentar implementar esta lógica na procedure que está sendo executada. Ela poderia guardar o dia/hora de início e ficar verificando de tempos em tempos se algum limite foi ultrapassado (ex: dentro de algum LOOP de instruções, caso existir).

Uma outra opção seria você criar uma tabela onde cada procedure a ser monitorada registraria seu início e posteriormente seu término de execução (com sucesso ou mesmo quando aborta com erro). Você poderia criar então uma procedure de monitoramento que avaliaria com base nesta tabela o tempo de execução da procedure.

Acho que teria várias formas de você tentar monitorar este tempo de execução. Talvez detalhando um pouco mais qual a sua dúvida, os foristas possam apresentar outras recomendações.

Abraços,

Sergio Coutinho
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Entendi..Tens algum exemplo dessa procedure que você comentou?

Uma outra opção seria você criar uma tabela onde cada procedure a ser monitorada registraria seu início e posteriormente seu término de execução (com sucesso ou mesmo quando aborta com erro). Você poderia criar então uma procedure de monitoramento que avaliaria com base nesta tabela o tempo de execução da procedure.
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Mas a minha idéia inicial é que tivesse essa tabela de parâmetros que tem registrado o nome da procedure e o tempo de execução.Por exemplo:

Selecionar tudo

Procedure     Tempo de Execução      DataInicio               DataFim              Status
mmmm          01:00                  23/05/2013 08:00         23/05/2013 08:00     ok
E uma outra procedure que verificaria quando essa procedure MMMM ultrapasse essa 01 hora e quando isso acontecesse poderia ter uma ação de envio de e-mail para o DBA ou Desenvolvedor.Hoje até tenho essa tabela de log de carga que tem algumas dessas informações mas precisaria ser separado.
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal,

Alguém tem um script para monitorar as procedures de carga?
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Mariogus,

Não creio que existam procedures de monitoramento de outras procedures.

A solução para o seu caso parece simples:

- Crie uma tabela e com 3 colunas (nome procedure, data inicio, data fim);
- Altere cada uma procedures a serem monitoradas. Por exemplo, adicione no inicio da execução da mesma
um INSERT na tabela do passo anterior. Popule com o nome da procedure e a data/hora de inicio. No final
desta mesma procedure, coloque um comando de UPDATE, para atualizar a coluna de data de finalização;

Não parece complicado, bastando você conhecer as sintaxes de CREATE TABLE, INSERT e UPDATE.

Abraços e boa semana,

Sergio Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes