- Este tópico contém 6 respostas, 2 vozes e foi atualizado pela última vez 10 anos, 6 meses atrás por C-S-R.
-
AutorPosts
-
24 de abril de 2014 às 1:14 am #106563C-S-RParticipante
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:24 de abril de 2014 às 5:56 pm #106564rmanParticipante@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.
24 de abril de 2014 às 10:12 pm #106565C-S-RParticipante@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.
25 de abril de 2014 às 3:13 pm #106569rmanParticipante@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.
28 de abril de 2014 às 9:12 pm #106574C-S-RParticipanteBom 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.
29 de abril de 2014 às 12:00 am #106576rmanParticipante@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.
30 de abril de 2014 às 9:58 pm #106577C-S-RParticipante@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/ -
AutorPosts
- Você deve fazer login para responder a este tópico.