【问题标题】:Commits in concurrent transactions在并发事务中提交
【发布时间】:2014-10-17 08:20:36
【问题描述】:

并发事务执行。

T1 T2 ================== 右(一) 右(一) A=A+100 宽(一) A=A+200 宽(一) 犯罪 犯罪

这里最初 A=100。最终提交后 A 的值是多少? 注意:上面的事务调度是并发执行的(Inter-leaved),如图所示。

【问题讨论】:

  • 您使用的是什么隔离级别?例如docs.oracle.com/javadb/10.5.3.0/devguide/cdevconcepts15366.html
  • 我不能确切地告诉你,因为我才刚刚开始。但如果您正在寻找脏读,则允许脏读。
  • 考虑一下,考虑到您的布局方式,它与其他任何事情一样取决于锁定策略。

标签: database concurrency commit


【解决方案1】:

根据锁定策略有两种可能:

  1. 使用乐观锁定,T2 将向 DB 提交值 300,而 T1 将获得乐观锁定异常

  2. 使用行或表级别锁定并假设 T2 先获得锁,然后 A=400。这是因为 T2 首先获得锁,然后 T1 将阻塞,直到 T2 完成。因此,T2 提交 A=300。 T1 然后读取该值并提交 A=400。显然,在这种情况下,操作不会如图所示交错。

第三种可能性是 T1 可以先获得锁。在这种情况下,T1 无法在 T2 之后提交,因此根据您的图表,这实际上是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2022-01-20
    • 2021-12-28
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多