Pergunta

Eu tenho um rastreamento de uma máquina onde a seguinte consulta pareceu travar por dias:

SELECT table_name FROM user_tables

O que poderia gerar tal bloqueio?Os usuários nunca poderão modificar esta tabela;e houve muitas instâncias subsequentes desta consulta que foram executadas com êxito.

Foi útil?

Solução

Então, como a condição não existe mais, não há como saber o que aconteceu.

No entanto, no futuro, se isso ou algo semelhante acontecer novamente, você desejará usar a interface de espera do Oracle.Ou seja, olhe V$SESSION.

Primeiro, você desejará determinar se o processo está girando (ou seja, na CPU) ou bloqueando (ou seja, aguardando um evento de espera).A maneira de determinar isso é olhar para o STATE coluna:

  • Se ESTADO for 'WAITING', a sessão será bloqueada.Se for esse o caso, a coluna EVENT deverá descrever qual evento a sessão está aguardando.
  • Se o STATE for algo diferente de 'WAITING', então a sessão está na CPU e a coluna EVENT é a última coisa que ela esperou.
    • Se ESTADO for 'WAITED KNOWN TIME', então WAIT_TIME é o tempo esperado em centissegundos.
    • Se ESTADO for 'WAITED SHORT TIME', a sessão esperou menos de um centésimo de segundo.
    • Se ESTADO for 'WAITED UNKNOWN TIME', o tempo esperado não será conhecido porque timed_statistics foi definido como FALSE para a sessão.

Espero que ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top