Pular para o conteúdo
  • Este tópico contém 5 respostas, 5 vozes e foi atualizado pela última vez 14 anos, 3 meses atrás por Avatar photoRegis Araujo.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #101899
    airoosp
    Participante

      Boa tarde,

      Há um sistema que faz a atualização de várias tabelas do banco 10g durante o processamento de uma rotina de fechamento. Além destas tabelas, o mesmo também atualiza algumas tabelas que estão no banco 9i e este processo é feito via dblink.

      O usuário informou que o processo esta muito demorado, sendo assim, pequisei aqui no fórum e encontrei algumas querys que permitiram identificar o problema.

      As consultas retornaram as mensagens abaixo:

      “lock mode Row-X (SX) ” e “DX – Distributed transaction entry lock”

      Para resolver é necessário executar um kill na sessão do usuário, certo? Além disso é necessário executar mais algum procedimento?

      Ambiente Windows.

      Obrigado.

      Airton

      #101902
      rman
      Participante

        @airoosp

        Dar um kill na sessão não é a solução para o problema, ao matar a sessão algum processo não será executado por completo, ou seja, você esta quebrando a rotina de fechamento ou outra rotina. 😆

        A solução é estudar o caso, e modificar a forma que é feita, evitando os locks.

        #101907
        felipeg
        Participante

          Airton

          Conforme ja comentei em outra ocorrência aberta a pouco:

          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

          Matar a sessão é uma medida “drástica”, o ideal é resolver o problema e não os sintomas dele.

          Segue o link sobre a discussão anterior, porém, se você voltar um pouco mais temos vários tópicos sobre isso:

          https://profissionaloracle.com.br/module … pic&t=5611

          Atenciosamente,
          Felipe.

          #101909
          David Siqueira
          Participante

            Bom dia Airton,

            A questão é a seguinte, mesmo não sendo um ambiente de Advanced Replication, você tem caracteristicas muito parecidas com as destes ambientes.

            Tanto no seu como nos de AR, você trabalha muito com a camada de redes, e isso gera um impacto nos processos quando sua infra apresenta algum tipo de GAP, pode ser perda de pacote, gargalos nos equipamentos de rede, enfileiramento de processos, enfim uma série de situações que lhe traram dores de cabeça.

            Eu tive oportunidade de atuar em um cliente que tinha este mesmo problema com filiais espalhadas pelo estado, e sua consolidação de dados era feita em um Banco de São Paulo, e via de regra é necessário estar sempre atento as visões DBA_2PC_PENDING e DBA_2PC_NEIGHBORS pois ali ficam registradas as sessões travadas por problemas de conexão , queda ou perda de pacotes.

            Dê uma olhada verifique se isso esta ocorrendo, caso não seja essa a problemática, tente aumentar o tamanho dos pacotes enviados vis Network pelo banco usando o SDU, um parametro adicionado aos arquivos de Network do Database.

            Vá nos dando o feedback ok?.

            Grande abraço.

            #101915
            airoosp
            Participante

              Bom dia,

              Agradeço as respostas, vou verificar as informações e depois passo um feedback sobre o problema.

              Felipeg, não consegui acessar o link que você passou, mesmo estando logado aparece mensagem de acesso negado.

              https://profissionaloracle.com.br/module … pic&t=5611

              Obrigado.

              Airton

              #101923
              Avatar photoRegis Araujo
              Participante

                Fala Airton.. boa tarde..!

                Só completando o que o David falou..

                Como vc viu, o evento de wait é devido a transação distribuida, o Oracle não consegue gerenciar este tipo de lock, por este motivo você precisa verificar alem do gargalo em rede qual o tempo máximo de wait até o timeout.. verifique o parametro “distributed_lock_timeout”, é com este parametro que o Oracle gerencia o tempo máximo q uma transação distribuida ficará em wait até a transação local ser concluida, caso o tempo seja atingido e a transação local não tiver sido resolvida, a sessão no banco origem sofrerá timeout.

                O que você pode fazer é verificar quem está bloqueando quem e qual o comando que está sendo executado para bloquear a transação..

                Use este select no banco destino.. vai lhe ajudar..!! Se a sessão que estiver bloqueando estiver inativa.. verifique suas aplicações.. pois em algum momento faltou rollback ou commit…


                -- PROCESSOS EM LOCK POR SESSÃO E USUÁRIO
                SELECT SID,status, USERNAME, BLOCKING_SESSION, MACHINE, OSUSER, SECONDS_IN_WAIT, SQL_HASH_VALUE
                FROM V$SESSION
                WHERE BLOCKING_SESSION IS NOT NULL
                UNION ALL
                SELECT DISTINCT A.SID, a.status, A.USERNAME, A.BLOCKING_SESSION, A.MACHINE, A.OSUSER, a.SECONDS_IN_WAIT, A.SQL_HASH_VALUE
                FROM V$SESSION A, V$SESSION B
                WHERE A.SID = B.BLOCKING_SESSION
                ORDER BY 1

                Abraços..!!

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