ORACLE – enq: TX row lock contention

Enqueues sono blocchi che coordinano l’accesso alle risorse del database.

enq: wait event indica che la sessione è in attesa di un blocco mantenuto da un’altra sessione.

La quantità di tempo di attesa associata a questo evento di attesa è eccessiva e può essere responsabile per problemi di prestazioni osservati nell’applicazione. Le accodamenti TX vengono acquisiti in esclusiva quando a la transazione inizia la sua prima modifica e viene mantenuta finché la transazione non esegue un COMMIT o ROLLBACK.

Alcune situazioni di accodamento TX:

– Attese per TX in modalità 6 si verificano quando una sessione è in attesa di un livello di riga bloccato già presente in un’altra sessione. Ciò si verifica quando un utente aggiorna o elimina una riga, che un’altra sessione desidera aggiornare o eliminare. Questo tipo di attesa di accodamento TX corrisponde a l’evento di attesa enq: TX – roe lock contention.

Per risolvere questo problema dovresti fare in modo che la prima sessione già tenendo il blocco esegua un COMMIT o ROLLBACK.

-Attese per TX in modalità 4 possono verificarsi se una sessione è in attesa a causa di potenziali duplicati in Indice UNICO. Se due sessioni tentano di inserire lo stesso valore chiave, la seconda sessione deve aspetta per vedere se un ORA-0001 deve essere sollevato o meno. Questo tipo di attesa di accodamento TX corrisponde all’evento di attesa enq: TX – row lock contention.

Per risolvere nuovamente questo problema, la prima sessione è già in possesso del blocco, eseguire un COMMIT o un ROLLBACK.

attese per l’accodamento TX in modalità 4 possono verificarsi anche quando più sessioni tentano di aggiornare oppure eliminare righe diverse coperte dalla stessa voce bitmap. Naturalmente, questo non si applica se l’applicazione non utilizza indici bitmap.

A differenza della voce di indice B-tree, che contiene un singolo ROWID, una voce bitmap può potenzialmente coprire un intervallo di ROWID. Quindi, quando una voce di indice bitmap è bloccata, tutti i file Anche i ROWID coperti dalla voce sono bloccati.

risoluzione dei probleim:
Per quale SQL è in attesa:
select sid, sql_text from v$session s, v$sql q where sid in (select sid from v$session where state in
(‘WAITING’) and wait_class != ‘Idle’ and event=’enq: TX – row lock contention’ and (q.sql_id =
s.sql_id or q.sql_id = s.prev_sql_id));
The blocking session is:
select blocking_session, sid, serial#, wait_class, seconds_in_wait from v$session where
blocking_session is not NULL order by blocking_session;

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *