Know More About Oracle Row Lock

本文深入探讨了Oracle数据库中细粒度行锁(rowlock)的工作原理。特别关注当两个进程分别锁定同一行数据的不同情况,及如何处理锁冲突导致的等待事件。通过对具体场景的分析,揭示了Oracle内部如何管理行级锁以及解决潜在的死锁问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道在Oracle中实现了细粒度的行锁row lock,且在ORACLE的内部实现中没有使用基于内存的行锁管理器,row lock是依赖于数据块本身实现的。换句话说判定一行数据究竟有没有没锁住,要求Server Process去pin住相应的block buffer并检查才能够发现。 但是试想一个场景,若process A 通过update语句锁定了数据表 Z数据块上的一行数据, 并长时间既没有rollback亦没有commit;此时Process B也运行了一条DML语句, 它通过索引找到rowid并找到了 Z数据块, 它发现这一行数据已经被process A发起的一个事务的ITL锁住了,它可能试图做一些cleanout操作,但是发现被锁住的row在相关的事务表中仍未被commit, 那么很抱歉的是Process B需要进入"enq: TX - row lock contention"的等待事件了。 问题在于Process B的无尽等待的终结在哪里呢?   有同学肯定会说只要Process A释放了其锁定的row,那么Process B就会立即结束其"enq: TX - row lock contention"等待了。   事实是这样的吗?



本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1278318

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值