- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 3 meses atrás por
fabiogalera.
-
AutorPosts
-
24 de novembro de 2011 às 3:25 pm #101776
rman
ParticipanteBom 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…
24 de novembro de 2011 às 3:56 pm #101777eversonpiza
ParticipanteGeralmente event wait application é relacionado a lock, onde uma sessão esta esperando a outra.
24 de novembro de 2011 às 5:30 pm #101778felipeg
ParticipanteRman,
É exatamente o que o Everson falou.
De acordo com a Oracle
ApplicationWaits 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.24 de novembro de 2011 às 6:32 pm #101779rman
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 ?
24 de novembro de 2011 às 7:03 pm #101781felipeg
ParticipanteRman
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.24 de novembro de 2011 às 7:05 pm #101782eversonpiza
ParticipanteOi 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
25 de novembro de 2011 às 2:18 am #101806fabiogalera
ParticipantePera 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 linhasEsses 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 … =)
25 de novembro de 2011 às 2:56 pm #101813rman
Participante@fabiogalera
Quando eu vejo no grafico do Enterprise Manager a legenda APPLICATION, isso é o CLASS WAIT ? Era disso que eu estava me referindo…
25 de novembro de 2011 às 7:07 pm #101837fabiogalera
ParticipanteSe você clicar no APPLICATION, você verá que irá abrir um outro gráfico mostrando os WAIT EVENTS dessa classe.
-
AutorPosts
- Você deve fazer login para responder a este tópico.