Como user_tables pode ser bloqueado no Oracle?
-
13-12-2019 - |
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.
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.
- Se ESTADO for
Espero que ajude.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow