Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #106563
    Avatar de C-S-RC-S-R
    Participante

      Ola pessoal,

      Venho aqui com mais um problema, rsrs

      Estou com problema de lock a aplicação esta tomando esse erro ora-02049, intermitente.
      Pelo que vi para resolver é só aumentar o parâmetro distributed_lock_timeout.
      Porém achei a solução meio ruim, pois acredito que só vai postergar o problema.
      Gostaria de saber qual o comando que esta com problema.

      Bom tirei um AWR para verificar o lock.

      Mas nos sql não aparece nenhum anormal.

      Alguém poderia me ajudar a achar o danado do SQL?

      Attachments:
      #106564
      Avatar de rmanrman
      Participante

        @C-S-R

        No momento do problema, acompanhe pelo Enterprise Manager as sessões bloqueadoras.

        O LOCK é gerado pelo mal gerenciamento das transações, isso pode ser causado pela falta de COMMIT ou pelo baixo desempenho de uma transação.

        #106565
        Avatar de C-S-RC-S-R
        Participante

          @rman

          O problema que esse problema é em um cliente então não consigo ver no momento do lock.
          Solicitei um awr do período para tentar verificar o problema.

          Na base de desenvolvimento, pelo fato de poucos registros, acontece o lock muito rapidamente não ocorrendo o timeout.

          Pelo que vi o lock e por causa de um update, mas esse update deveria ser executado somente em uma sessão, não dando lock em outras sessões, a não ser que eles estejam fazendo o processo duplicado.

          #106569
          Avatar de rmanrman
          Participante

            @C-S-R

            O AWR não irá te mostrar qual sessão está bloqueado. O que ele mostra é apenas os maiores eventos de espera.

            A identificação deve ser feita em real time.

            #106574
            Avatar de C-S-RC-S-R
            Participante

              Bom pessoal forcei o lock no meu ambiente.

              Porém pelo EM ou através de SQLs só consigo achar a sessão que esta bloqueando e não o comando.

              Consigo ver que a sessão A comando XPT está em lock por causa da sessão B.
              Porém não consigo ver o comando.

              Mesmo se eu ver quais os comandos da sessão aparece o ultimo, em um teste que eu fiz apareceu o meu próprio select para verificar os locks.

              Alguem sabe como achar o comando?

              Obrigado a todos pela ajuda.

              #106576
              Avatar de rmanrman
              Participante

                @C-S-R

                Quando a sessão A está bloqueando a sessão B, é a transação aberta em A que está bloqueando a transação de B. Não necessariamente é o último comando da transação que causa o lock, pode ser qualquer um, pode ser o primeiro, o segundo, e assim por diante.

                Identifique qual funcionalidade os usuários envolvidos no lock, e analise as transações.

                #106577
                Avatar de C-S-RC-S-R
                Participante

                  @rman

                  É então pensei que tinha um comandinho mágico que me falasse o comando que esta ocasionando o lock. Mas não tem como.

                  Pelo que pesquisei uma forma de verificar o que a sessão esta fazendo seria pelo ASH.
                  Porém nem sempre o comando aparece é voce pode pegar o SQL errado pensando que é o do lock.

                  Achei um site bem interessante do assunto. Vou colocar para interessados.

                  Muito obrigado pela ajuda rman.

                  https://community.oracle.com/thread/2509840?tstart=0
                  http://jonathanlewis.wordpress.com/2009/04/19/locking-sql/

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