enq: TX - row lock contention: 等待:会话被另一事务持有的行级锁阻塞
Oracle含义
会话正在等待另一事务持有的行锁被释放。这是典型的应用级锁等待事件。
原因
并发事务尝试更新同一行、事务长时间未提交、未建索引的外键导致大范围加锁,或集中在顺序键上(热块)。
解决方法
找出阻塞会话和被阻塞会话:SELECT * FROM v$session WHERE blocking_session IS NOT NULL; 并与 v$lock 关联分析。如果根本原因是长事务,审查提交策略。为外键列建立索引。针对热点行重新考虑设计(sequence、hash)。必要时终止阻塞会话。
同一数据库的其他条目
- ORA-01578Oracle data block corrupted (file #, block #)(Oracle 数据块损坏(文件号,块号))
- ORA-01722Invalid number(无效数字)
- ORA-02049Timeout: distributed transaction waiting for lock(超时:分布式事务正在等待锁)
- log file sync等待:会话在提交时等待 LGWR 将 redo 刷新到磁盘
- db file sequential read等待:单块物理读,通常为索引或表查找
- db file scattered read等待:多块物理读,通常为全表扫描或索引快速全扫描
- buffer busy waits等待:争用一个正被其他会话读取或修改的缓冲区