zoukankan      html  css  js  c++  java
  • 数据库 chapter 11 并发控制

    第十一章 并发控制

    介绍并发操作可能造成数据不一致的问题,讲解并发控制的基本概念和最常用的封锁技术。

    在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行,这种并行执行方式称为同时并发方式。

    并发控制:为了保证事务的隔离性和一致性。

    并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据等。

    丢失修改:两个事物T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。例如:

    不可重复读

    不可重复读是指事物T1读取数据后,T2执行更新操作,使T 1无法再现前一次读取结果。

    读“脏”数据

    并发控制的主要技术有封锁(Locking)、时间戳(Timestamp)和乐观控制法,商用的DBMS一般都采用封锁方法。

    封锁:在事务T对某个数据对象,例如表、记录等操作之前,先向系统发出请求,对其加锁,在事务T释放它的锁之前,其他事务不能更新此数据对象。

    基本的锁有两种,排它锁(Exclusive Locks,简称X锁)和共享锁(Share Locks,简称S锁)。

    和操作系统一样,封锁的方法可能引起活锁和死锁等问题。

    活锁:

    如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁后系统首先批准了T3的请求,T2仍等待。然后T4又请求封锁R,T3释放了R上的封锁之后系统又批准了T4的请求,T2可能永远等待,这就是活锁。

    避免活锁的简单方法是采用先来先服务的策略,当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中的第一个事务得锁。

    死锁的预防:

    一次封锁法:一次封锁发要求每个事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。

    顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按照这个顺序实行封锁。

    死锁的诊断与解除

    超时法:如果一个事务的等待时间超过了规定时限,就认为发生了死锁。

    等待图法:

    并发调度的可串行性

    冲突可串行化调度

    两段锁协议

    目前DBMS普遍采用两段锁(Two-Phase Locking,简称2PL)协议的方法实现并发调度的可穿行性,从而保证调度的正确性。

    就是封锁时间不可以解锁,解锁时间不可以封锁。

    封锁的粒度

    封锁对象的大小称为封锁粒度。封锁的对象可以是逻辑单元,也可以是物理单元。

    多粒度封锁

  • 相关阅读:
    将数据保存在线程中
    OpenSmtp 的代码修正,支持中文和HTTP代理连接
    枚举.NET的基本类型
    通过HTTP代理连接到目的的协议
    程序出现了异常:应用程序无法启动,因为应用程序的并行配置不正确
    关于最近的一篇文章
    检测TextBox的回车键事件
    程序跳过trycatch地崩溃
    给程序加上UAC控制的几个链接
    Sql Server附加数据库的时候出现Operating system error 5: "5(Access is denied.)" 的错误
  • 原文地址:https://www.cnblogs.com/Cheryl06/p/7300669.html
Copyright © 2011-2022 走看看