Oracle
 sql >> Database >  >> RDS >> Oracle

Usa gv$session per sapere se una query è in sospeso

In gv$session , l'event la colonna ti dice quale evento di attesa è attualmente in attesa della tua sessione. Se la tua sessione è in attesa di una sorta di blocco tenuto da un'altra sessione, l'event ti dirà che (ad esempio, sarà "enq:TX - row lock contenzioso" se sei accodato in attesa di bloccare una riga tenuta da un'altra sessione) e blocking_instance e blocking_session verrà popolato con l'istanza e l'ID di sessione del titolare del blocco. Puoi anche guardare seconds_in_wait (se wait_time=0 ) per determinare quanti secondi ha trascorso la sessione nell'evento di attesa corrente. Questo dovrebbe almeno dirti se la tua sessione è attualmente "bloccata" ma non ti dice se la tua richiesta finirà mai davvero:se c'è un piano sbagliato, è del tutto possibile che tu abbia "buono" wait eventi come le attese per l'I/O del disco che indicano che la sessione sta facendo qualcosa ma che la query non verrà mai davvero completata.