enq: TX - row lock contention: Espera: sesión bloqueada por un bloqueo de fila que mantiene otra transacción
Oracle¿Qué significa?
Una sesión espera a que se libere un bloqueo de fila que mantiene otra transacción. Es el wait event clásico de bloqueo a nivel de aplicación.
¿Por qué ocurre?
Transacciones concurrentes que intentan actualizar la misma fila, transacciones sin commit durante mucho tiempo, bloqueos amplios causados por claves foráneas sin índice o concentración en una clave secuencial (hot block).
Cómo solucionarlo
Encuentre las sesiones bloqueantes y bloqueadas: SELECT * FROM v$session WHERE blocking_session IS NOT NULL; y correlacione con v$lock. Si la causa raíz son transacciones largas, revise la estrategia de commit. Indexe las columnas de claves foráneas. Replantee el diseño (sequence, hash) para filas calientes. Termine la sesión bloqueante cuando sea necesario.
Más entradas de este motor
- ORA-01578Oracle data block corrupted (file #, block #) (bloque de datos de Oracle corrupto)
- ORA-01722Invalid number (número no válido)
- ORA-02049Timeout: distributed transaction waiting for lock (timeout de bloqueo en transacción distribuida)
- log file syncEspera: sesión esperando a que LGWR escriba el redo en disco al hacer commit
- db file sequential readEspera: lectura física de un solo bloque, normalmente un acceso a índice o tabla
- db file scattered readEspera: lectura física multibloque, normalmente un full table scan o index fast full scan
- buffer busy waitsEspera: contención por un buffer que otra sesión ya está leyendo o modificando