DBMS并发控制

在并发控制中,可以同时执行多个事务。
它可能会影响事务结果。保持这些事务的执行顺序非常重要。

并发控制的问题

并发事务以不受控制的方式执行时可能会出现几个问题。 以下是并发控制中的三个问题。

  • 更新丢失
  • 脏读
  • 不可重复读取

1. 更新丢失

  • 当访问相同数据库项的两个事务包含其操作时,某些数据库项的值不正确,则会发生丢失的更新问题。
  • 如果两个事务T1和T2读取记录然后更新它,那么第二个更新将覆盖更新第一个记录的效果。

示例

其中,

  • 在时间t2,事务-X读取A的值。
  • 在时间t3,Transaction-Y读取A的值。
  • 在时间t4,Transactions-X基于在时间t2看到的值写入A的值。
  • 在时间t5,Transactions-Y基于在时间t3看到的值写入A的值。
  • 因此,在时间T5,Transaction-X的更新丢失,因为事务y覆盖它而不查看其当前值。
  • 这种类型的问题称为丢失更新问题,因为此处丢失了一个事务所做的更新。

2. 脏读

  • 在一个事务更新数据库的项目,然后由于某种原因事务失败的情况下发生脏读。 更新的数据库项在被更改回原始值之前由另一个事务访问。
  • 事务T1更新由T2读取的记录。 如果T1中止,则T2现在具有从未形成稳定数据库的一部分的值。

示例:

其中

  • 在时间t2,事务-Y写入A的值。
  • 在时间t3,Transaction-X读取A的值。
  • 在时间t4,Transactions-Y回滚。 因此,它将A的值更改回t1之前的值。
  • 因此,Transaction-X现在包含一个永远不会成为稳定数据库一部分的值。
  • 这种类型的问题称为脏读问题,因为一个事务读取尚未提交的脏值。

3. 不可重复读取问题

  • 不一致的检索问题也称为不可重复读取。 当事务在一组数据上计算某些汇总函数而其他事务正在更新数据时,则会发生不一致的检索问题。
  • 事务T1读取记录,然后进行一些其他处理,在此期间事务T2更新记录。 现在,当事务T1读取记录时,新值将与先前的值不一致。

示例:

假设有两个事务在三个账户上运作。

  • Transaction-X正在进行所有余额的总和,而Transaction-Y正在将账户1中的金额50转移到账户-3。
    这里,transaction-X产生550的结果是不正确的。 如果在数据库中写入此生成的结果,则数据库将变为不一致状态,因为实际总和为600
    在这里,transaction-X看到了数据库的不一致状态。

并发控制协议

并发控制协议可确保并发事务的原子性,隔离性和可串行性。 并发控制协议可以分为三类:

  • 基于锁定的协议
  • 时间戳协议
  • 基于验证的协议

上一篇:DBMS死锁

下一篇:DBMS基于锁的协议

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程