数据库并发控制

当多个用户同时并发的存取数据库时可能产生多个事务同时存取同一数据的情况。如果对并发操作不加控制就可能破坏数据的一致性。
并发调度的核心问题:

  1. 对并发操作进行正确的调度,有效控制;
  2. 在保证一致性的前提下最大限度地提高并发度。
    不同事务中各个步骤的执行顺序必须以某种方式进行规范,控制这些步骤的功能由DBMS的调度器部件完成。保证并发执行的事务能保持一致性的整个过程称为并发控制

事务调度

DBMS在处理用户提交事务时的策略,即事务调度。调度是一个或者多个事务的操作按时间排列的一个序列。表示事务在指令系统中执行的时间顺序。

串行调度

如果一个调度的动作顺序排列,顺序执行,没有混合,那么称这一调度为串行调度。

并行调度

如果一个调度的动作是事务之间可以相互混合,那么这一调度为并行调度。

事务调度的要求

  1. 包含所有事务的操作指令;
  2. 一个事务中指令的顺序保持不变;
  3. (串行调度)对于n个事务的事务组,可以有n!个有效调度;
  4. (并行调度)来自不同事务的指令可以交叉执行;
  5. (并行调度)当并行调度等价于某个串行调度时,则称它是正确的。

并行VS串行

  1. 并行可能破坏数据库的一致性;
  2. 串行效率较低;
  3. 因为一个事务由不同的步骤组成的,所涉及的系统资源也不同,所以可以并发执行。并行充分发挥了系统的性能;
  4. 串行会导致难以预测的时延,并行会减少平均响应时间。

并发操作事务一致性

并发操作带来数据不一致性

  1. 丢失修改:两个事务同时修改同一数据,一个事务提交破坏了另外一个事务的提交的结果(覆盖了);
  2. 不可重复读:一个事务读取一个数据后,这个数据被另外一个事务更新,导致无法再次显现前一次读取的结果;
  3. 读“脏”数据:一个事务对数据执行了更新操作,另一个事务读取了更新后的数据,而因为某种原因撤销了更新操作,使另一个事务读到了“脏”数据,或者读取到了某个事务的中间结果。

数据不一致性原因以及方法

  1. 原因:产生三类不一致性的主要原因是并发操作破坏了事务的隔离性
  2. 并发控制就是要用正确的方式调度并发操作,使一个事务的执行不受其他事务的干扰,从而避免造成数据的不一致性;
  3. 并发控制的主要技术是封锁、时间戳和有效确认。