- Este tópico contém 5 respostas, 5 vozes e foi atualizado pela última vez 14 anos, 3 meses atrás por
Regis Araujo.
-
AutorPosts
-
29 de novembro de 2011 às 12:09 am #101899
airoosp
ParticipanteBoa 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
29 de novembro de 2011 às 1:08 am #101902rman
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.
29 de novembro de 2011 às 2:37 pm #101907felipeg
ParticipanteAirton
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.29 de novembro de 2011 às 3:24 pm #101909David Siqueira
ParticipanteBom 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.
29 de novembro de 2011 às 4:05 pm #101915airoosp
ParticipanteBom 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
29 de novembro de 2011 às 9:20 pm #101923Regis Araujo
ParticipanteFala 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..!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.