悲观事务的疑问

关于 TiDB 悲观事务与乐观事务,以下说法正确的有:
A. 悲观事务默认会对涉及的行加锁,能大幅降低事务冲突
B. 乐观事务冲突时会报 WriteConflict,需要业务重试
C. 悲观事务一定比乐观事务性能更好
D. 大事务、高冲突场景更适合悲观事务
E. 开启悲观事务后,事务超时时间可以完全不用关注

悲观事务,悲观锁和乐观事务这块一直不是很理解

选择B乐观锁也要检测冲突

A、B、D

C. 悲观事务一定比乐观事务性能更好 ---- 错误
低冲突、读多写少场景:乐观事务更快(无加锁开销)
高冲突场景:悲观事务更优
不存在 “一定更好”。

E. 开启悲观事务后,事务超时时间可以完全不用关注----- 错误
悲观事务持有锁时间过长依然会:
导致其他事务阻塞
触发锁等待超时
引发性能雪崩
事务执行时间依然需要严格控制。

选择 A B D

1 个赞

C E太绝对了 不选

1 个赞

A,B,D就这三个

C. 悲观事务一定比乐观事务性能更好 。 悲观事务加锁有开销,低冲突场景下性能通常不如乐观事务,并非一定更好。
E. 开启悲观事务后,事务超时时间可以完全不用关注。悲观事务同样存在锁等待、事务超时等问题,仍需合理设置超时时间。
所以我选ABD

什么样的事务是悲观事务

我感觉选A和D

B. 正确

乐观事务基于多版本并发控制(MVCC),不提前加锁,在事务提交时才检测冲突。如果检测到写冲突,会直接返回 WriteConflict 错误,需要业务侧进行重试。

D. 正确

大事务、高冲突场景下,乐观事务极易出现大量 WriteConflict 重试,性能急剧下降;而悲观事务通过提前加锁,避免了冲突重试,更适合这类场景。

  • 互联网高并发业务(如电商、社交):优先用乐观事务,低冲突场景性能最优
  • 金融核心、高冲突大事务(如转账、账务):选择悲观事务,保障数据一致性,避免重试

A倒是也正确就是加锁也是有代价的

正确答案是ABD
其中A 认为是错误的 可能是因为 混淆了显式加锁语句和悲观事务的默认加锁机制,悲观事务的本质就是默认对写操作涉及的行加锁,这是 TiDB 官方明确的设计。

是的,加锁会降低事务冲突但是也有会加锁的代价

是单选题吗? 我选b

ABD

ABD,另外两个的表述太绝对

AB肯定对