小白学数据库(九)事务与并发

事务

事务:事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元,一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。
事务的特征

  • 原子性:指事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做
  • 一致性:指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 隔离性:指数据库中一个事务的执行不能被其它事务干扰。
  • 持久性:也称为永久性。指事务一旦提交,其对数据库数据的改变就是永久的。

并发控制

并发控制:在多用户数据库系统中,当多个用户并发存取数据库时就会产生多个事务同时存取统一数据的情形。若不加控制,可能会存取和存储不正确的数据,造成数据库的不一致性。

不同的多事务执行方式:

  • 串行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。
    小白学数据库(九)事务与并发
  • 交叉并行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。
    小白学数据库(九)事务与并发
  • 同时并发方式:多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。

并发操作带来的不一致性:

  • 丢失修改:两事务独处统一数据并修改,先写出的数据修改会丢失
    小白学数据库(九)事务与并发
  • 不可重复读:
    小白学数据库(九)事务与并发
  • 读“脏”数据:
    小白学数据库(九)事务与并发

并发控制措施
控制目标:事务运行过程中尽可能隔离事务外操作对本事务数据环境的影响。
主要技术:加锁
加锁就是事务T在对某个数据操作之前,先向系统发出请求,*其所要使用的数据。在事务T释放它的锁之前,其他事务不能操作这些数据。

基本的*类型

  • 排它锁(X锁,又称互斥锁):若事务T对数据对象R加上X锁,则只允许T读、写R,禁止其他事务对R加任何锁,相应地其他事务就无法读、写对象R。
  • 共享锁(S锁):若事务T对数据对象R加上S锁,则T可以读R,但不可以写R,且其他事务可以对R加S锁、但禁止加X锁。这保证了事务T在释放R的S锁之前,其他事务只可以读R,不可以修改R。
    *协议
    *协议:在运用X锁和S锁对对象加锁时,对何时申请X锁或S锁、持续时间、何时释放等的一些约定。

一级*协议:事务T在修改数据对象R之前必须对其加X锁,知道事务结束才释放。
可防止丢失修改,并保证事务T是可恢复的;但不能保证可重复读和不读“脏”数据。
小白学数据库(九)事务与并发
二级*协议:一级*协议加上对事务T对要读取的数据加S锁,读完后即释放S锁。
除了可以防止丢失修改外,还可以防止读“脏”数据;但不能保证可重复读数据。
小白学数据库(九)事务与并发
二级*协议:一级*协议加上事务T对要读取的数据加S锁,并直到事务结束才释放
除了可以防止丢失修改和不读“脏”数据之外,还进一步防止了不可重复数。
小白学数据库(九)事务与并发
三级*协议总结
小白学数据库(九)事务与并发

  • 活锁:数据对象不断处于上锁、开锁的交替状态,某个事务有可能为该对象上锁,但始终没有得到上锁机会而永久等待下去的情形
    避免活锁:如采用先来先服务的策略
  • 死锁:两个事务相互等待对方先释放资源,则会造成死锁
    小白学数据库(九)事务与并发
    死锁解决方法:
  • 一次*法:每个事务必须一次性将所要求的数据对象全部上锁才能执行读写操作,否则释放占用的资源。
    存在的问题:降低系统并发度;难于实现精确确定*对象。
  • 顺序*法:预先对数据对象规定一个*顺序,所有事物都按照这个顺序*。
    存在的问题:维护成本;难以实现

上述两种方法虽然都能有效地预防死锁,但都存在一些问题,DBMS普遍采用诊断死锁并解除的方法

  • 超时法:当一个事物的等待时间超过了规定的时限,就认为发生了死锁。
    存在的问题:时限规定太短,可能误判为死锁,规定时间太长,不能及时发现死锁,因此很难确定一个合理的时限。
  • 等待图法:用一个有向图表示事物等待的情况。节点表示事务,边表示事务间的等待关系。并发控制子系统定时检查此图,若发现有回路,则产生死锁。
    发生死锁时,解除死锁的方法:选择一个处理代价最小的事务,将其撤销。

并发调度的可串行性

多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则称这种调度为可串行化的调度
设有两个事务,分别包含下列操作:
事务T1:读B;A=B+1;写回A
事务T2:读A;B=A+1;写回B
设A、B的初值均为4,给出对着两个事务不同的调度策略

  • 策略1:串行调度
    小白学数据库(九)事务与并发小白学数据库(九)事务与并发
  • 策略1:并行调度
    小白学数据库(九)事务与并发 不可串行化
    小白学数据库(九)事务与并发可串行化