Pular para o conteúdo
  • Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 3 meses atrás por fabiogalera.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #101776
    rman
    Participante

      Bom dia!

      Gostaria de entender o que é o evento de wait application…

      1- O ocasiona esse tipo de evento?

      2- Esse evento está relacionado a uma má programação?

      Reparei que quando acontece esse evento de wait, existem sessões bloqueadas, então preciso mata a sessão causadora para liberar as outras…

      #101777
      eversonpiza
      Participante

        Geralmente event wait application é relacionado a lock, onde uma sessão esta esperando a outra.

        #101778
        felipeg
        Participante

          Rman,

          É exatamente o que o Everson falou.
          De acordo com a Oracle

          Application

          Waits resulting from user application code (for example, lock waits caused by row level locking or explicit lock commands)

          Eu uso o select abaixo pra procurar as sessões:

          select d.lock_type,
          d.mode_held,
          d.mode_requested,
          s1.SID sid_aguardando,
          s1.SERIAL# serial_aguardando,
          s1.USERNAME username_aguardando,
          s1.MACHINE machine_aguardando,
          s1.TERMINAL termina_aguardando,
          s1.PROGRAM program_aguardando,
          s1.module module_aguardando,
          s2.SID sid_lockando,
          s2.SERIAL# serial_lockando,
          s2.USERNAME usernam_lockando,
          s2.MACHINE machine_lockando,
          s2.TERMINAL terminal_lockando,
          s2.PROGRAM program_lockando,
          s2.MODULE module_lockando,
          do.object_name
          from dba_waiters d,
          v$session s1, --sessão aguardando
          v$session s2, --sesão lockando
          v$locked_object lo,
          dba_objects do
          where d.waiting_session = s1.SID
          and d.holding_session = s2.SID
          and s1.SID = lo.SESSION_ID
          and lo.OBJECT_ID = do.object_id
          and mode_held = 'Exclusive'

          Pra descobrir se é um problema de aplicação ou manual mesmo veja no select quem é o aplicativo responsável pelo lock e depois procure, usando o sid, pela instrução na v$sqltext para saber qual o comando.

          Atenciosamente,
          Felipe.

          #101779
          rman
          Participante

            @felipeg

            Certo, mas o que causa isso ? É por exemplo um insert que demorar muito para ser commitado ?

            Eu como DBA a única coisa que posso fazer é matar a sessão bloqueadora ?

            #101781
            felipeg
            Participante

              Rman

              Exato, é algum tipo de bloqueio (a nível de linha ou tabela) que está fazendo com que a outra aplicação que necessite dela tenha que esperar.

              Você, como DBA, tem que identificar quem bloqueia, quando bloqueia e qual o comando que está bloqueando.

              Se você quiser mais informações sobre o lock sugiro dar uma olhada nestes scripts.

              http://vsbabu.org/oracle/sect09.html

              Se a idéia é intervir sem alterar o código ou identificar a causa a única solução é forçar o fim da sessão.

              Isso é a forma como eu trato as situações aqui na empresa ( o que volta e meia acontece por se tratar de uma softwarehouse).

              Se mais alguém tiver algo a acrescentar ou corrigir, agradeço 8)

              Atenciosamente,
              Felipe.

              #101782
              eversonpiza
              Participante

                Oi Rman,

                Pode ser um insert, delete, update, alter table, etc, qquer tipo de transação que lock uma tabela (ou registro)

                Como DBA, sim a unica coisa a fazer é matar a sessão, mas o ideal é que alguém olhe a aplicação para descobrir oq esta acontecendo, já vi muitos casos onde o programador simplesmente esquece de colocar o commit.

                Everson

                #101806
                fabiogalera
                Participante

                  Pera lá, vocês estão confundindo as bolas hehe.

                  APPLICATION não é um WAIT EVENT, ele é um WAIT CLASS.

                  Imagine como se fosse um grupo de WAIT EVENTS, como por exemplo:

                  enqueue – locks de sessões
                  enq: TX – row lock contention – contenção nas linhas

                  Esses são exemplos de WAIT EVENT do grupo APPLICATION

                  Assim como log file sync é um WAIT EVENT da classe COMMIT, SQL*Net more data from/to dblink da classe NETWORK.

                  E assim por diante … =)

                  #101813
                  rman
                  Participante

                    @fabiogalera

                    Quando eu vejo no grafico do Enterprise Manager a legenda APPLICATION, isso é o CLASS WAIT ? Era disso que eu estava me referindo…

                    #101837
                    fabiogalera
                    Participante

                      Se você clicar no APPLICATION, você verá que irá abrir um outro gráfico mostrando os WAIT EVENTS dessa classe.

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.