Come può user_tables viene bloccato su Oracle?
-
13-12-2019 - |
Domanda
Ho una traceback da una macchina in cui la seguente query sembrava essere appesa per giorni:
SELECT table_name FROM user_tables
.
Cosa potrebbe generare un blocco del genere?Gli utenti non possono mai modificare questa tabella;E c'erano un sacco di casi successivi di questa query che correva con successo.
Soluzione
Quindi, poiché la condizione non esiste più, non c'è modo di dire cosa è successo.
Tuttavia, in futuro, se questo o qualcosa di simile si verificano di nuovo, ti consigliamo di utilizzare l'interfaccia di attesa di Oracle. Cioè, guarda V$SESSION
.
In primo luogo, ti consigliamo di determinare se il processo sta girando (I.e., sulla CPU) o il blocco (I.e., in attesa di un evento di attesa). Il modo per determinarlo, è guardare la colonna STATE
:
- .
- Se lo stato è
'WAITING'
, la sessione è bloccata. Se questo è il caso, la colonna evento dovrebbe descrivere quale evento è in attesa della sessione. - Se lo stato è qualcosa di diverso da "Aspettando", allora la sessione è sulla CPU, e la colonna evento è l'ultima cosa che ha aspettato.
- .
- Se lo stato è
'WAITED KNOWN TIME'
, allora wait_time è il tempo atteso in centisecondi.
- Se lo stato è
- Se lo stato è
'WAITED SHORT TIME'
, la sessione ha aspettato meno di un centesimo. - Se lo stato è
'WAITED UNKNOWN TIME'
, quindi il tempo atteso non è noto perché Timed_statistics è stato impostato su false per la sessione.
Spero che ti aiuti.