考虑在单个事务中更新3个表中的3行的情况。
尝试并行执行此操作会产生什么后果?
通过 parallel ,我的意思是并行执行多个此类交易。
通过性能后果,我的意思是:有些交易是否会等到第一个交易结束?在锁定完成之前,只会执行一个事务而所有其他事务都会被锁定吗?是基于行吗?基于表?
答案 0 :(得分:1)
来自border-box(Oracle 11.2):
行锁(也称为TX锁)是单行表的锁。 事务获取INSERT修改的每一行的行锁, UPDATE,DELETE,MERGE或SELECT ... FOR UPDATE语句。排 在事务提交或回滚之前,锁存在。
这意味着对于数据更新,仅锁定受影响的行。如果对相同的行执行多个更新,则第一个“捕获”该行将导致其他行等待释放行(提交/回滚)。
此外,这可能会导致以下循环更新方案出现死锁:
Trans-A -> TA-RA -> TB-RB
Trans-B -> TB-RB -> TA-RA
这意味着更新需要始终具有相同的表更新顺序。
*读取不会被锁定,并且会看到最新提交的值。