数据库基础——并发控制

因为多个事务对数据库的并发控制造成ACID特性被破坏,为保证数据的隔离性和一致性,需要并发控制。
 
一、多事务并发导致的问题
1.丢失修改(Lost Update,READ UNCOMMITED)
   T1              T2
   R(A)=16
                 R(A)=16
   W(A)=A-1
                 W(A)=A-1
   T1的修改丢失。
2.不可重复读(Non-Repeatable Read)
   2.1T1读取数据,T2修改了数据,当T1再次读取刚才的数据发现前后不一致。
   2.2T1读取数据,T2删除数据,T1按照相同条件重新读取数据,发现数据消失3
   2.3T1读取数据,T2插入数据,T1按照相同条件重新读取数据,发现增加了数据。
   2.2和2.3被称为幻影现象(SERIALIZABLE)。
3.读脏数据(Dirty Read)
T1修改数据并写回磁盘,T2读取数据,T1由于某种原因被撤销,这时T1已经恢复为原值,T2读取的数据和数据库中的数据不一致。
 
 
二、并发技术
1.封锁
1.1排它锁(Exclusive Locks,X锁,写锁)
  若事务T对数据对象A加上X锁,则只允许T读取和修改A。
1.2共享所(Share Locks,S锁,读锁)
  若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能对A加S锁,不能加X锁。
2.活锁和死锁
  封锁技术引发活锁和死锁问题。
2.1活锁
  T1封锁数据R,T2请求封锁R,T2等待,T3请求封锁R;当T1释放R,系统首先批准T3,反复有事务申请R,均批准,则T2一直处于等待状态。
  避免活锁方法:采取先进先出策略。
2.2死锁
  事务T1封锁数据R1,事务T2封锁数据R2,事务T1有申请封锁R2,因为T2已经封锁R2,T1一直等待T2释放R2。
  避免死锁方法:1.一次封锁法:一次把一个事务要使用的数据全部加锁(缺点:降低并发性)2.顺序封锁法:预先对数据对象有一个封锁顺序(缺点:维护封锁顺序成本高,并且很难规定)3.诊断和解除死锁(常用)
  诊断方法:1.超时法(缺点:误判和无法及时发现死锁)2.事务等待图法
  解除死锁方法:选择撤销代价较小的事务。
3.并发调度的可串行性
  并发执行的结果应和串行执行的结果一致。
3.1两段锁协议(Two-Phase Locking,2PL)
  定义:所有事务分两个阶段对数据加锁和解锁。

1.对任何数据读写前,首先申请并获得对数据加锁;

2.在释放一个封锁以后不得申请其他封锁。

实质是一次封锁的优化实现。

3.2封锁的力度
封锁的对象的大小被称为封锁力度。
3.3多粒度封锁
3.4意向锁
原文地址:https://www.cnblogs.com/bluewhy/p/4962919.html