精华内容
下载资源
问答
  • 事务管理是数据库中很重要的一部分,也是非常精彩的一部分,集中解决了数据库在操作过程中关于效率和正确性的平衡,好比分蛋糕一样,又要分得快,又要得公平。 先解释两个概念 事务:由两个数据库操作(读和写)和一...

    事务管理是数据库中很重要的一部分,也是非常精彩的一部分,集中解决了数据库在操作过程中关于效率和正确性的平衡,好比分蛋糕一样,又要分得快,又要得公平。
    先解释两个概念

    事务:由两个数据库操作(读和写)和一个非数据库操作(比如加减乘除)组成

    四大特性ACID

    性质 解释
    原子性 事务是不可分割的
    一致性 事务是从一种一致的状态转换到另一种一致的状态
    隔离性 事务的执行时相互独立的
    持久性 成功提交的事务结果永久记录在数据库中

    如果还不是很理解四个特性,可以参考这篇博客https://www.cnblogs.com/fjdingsd/p/5273008.html

    今天我们要讨论的是并发控制,主要目标是使得多个用户能够并发访问数据。

    为了达到这一效果,导致了以下问题的产生

    丢失更新问题

    在这里插入图片描述
    这张图表现了两个事务T1,T2,并且他们基本并发执行,其中T1要慢一个t,假设bal初始为100,T1要减10,T2要加100,这类似于一个转账操作,无论顺序如何,结果都将是190,现在t4时刻,T2已经往bal里面加了100,此时是200,然后T1减10,但是T1减掉的是之前读取的bal,所以T1结果为90,T2的更新丢失

    显然在这种转账的情况中,每一次写都对读有影响,所以每一笔转账都应该是原子操作(不可分割的操作)所以不能并发

    未提交依赖(污读或是脏读)

    如果在一个事务修改了数据,但是还没写回的时候,另一个事务就读取,就导致脏读。
    比如说,我打算转10000块给我老爸,我刚输完密码,我老爸就收到了,但是一会后,由于我转账手续有问题,钱有退回来了,凭空多了10000
    如图
    未提交依赖

    T4修改了数据,此时还没有写回,但是T3已经读取了,而T4因为种种原因最后回滚了,也就是说修改失败,那么根据事务原子性,T4的所有修改都应该失效,但是在t5时刻,T3就读取了数据,导致脏读

    以上两个问题,一个是读了更新前的数据,一个是读取了不该读的更新数据,都是和写有关,而对数据库只执行读操作的事务,如果顺序不好,也会产生不正确的结果

    不一致分析问题

    不一致分析问题

    这里t1时刻x+y+z和为175,但是最后却变成了185,原因就在于t4时刻x-10,在t7时刻转给了z,但是t4时算入和的是原来的x,而t7时算入和的是转账后的z,T6读的顺序不一样,导致错误

    此外还有模糊读,幻读等问题,本质上都是由于读写了同一个数据,但是由于并发,顺序出现了问题导致的

    那你可能会说,那大不了不并发咯,一个一个来总不会错,可是这样简单粗暴的方法是在太影响效率,所以解决以上问题的方法就是并发控制技术,在下一篇博客有讲解

    展开全文
  • 并发控制

    千次阅读 2018-08-02 18:17:07
    所谓事务,是指用户定义的一个数据库操作序列,这些操作要么全做,要么全不做...事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务。 并发操作带来的数据的不一致性问题: 1.丢失修改 两个事务T1...

    所谓事务,是指用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
    事务具有四个特性:
    1.原子性 2.一致性(Consistency) 3.隔离性(Isolation)持续性(Durability)

    并发控制概述

    事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务。
    并发操作带来的数据的不一致性问题:
    1.丢失修改
    两个事务T1和T2读入同一组数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
    2.不可重复读
    不可重复读是指事物T1读取数据后,事务T2执行更新操作,使T1无法再前一次读取的结果。不重复读包括三种结果:
    (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。
    (2)事务T1按一定条件从数据库中读取某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘消失了。
    (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时,发现多了一些记录。
    后两种不可重复读有时也称为幻影现象。
    3.读脏数据(Dirty Read)
    读脏数据是指事物T1修改某一数据,并将其写会磁盘,事物T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据被恢复原值,T2读到的数据与数据库中的数据不一致,则T2读到的数据就为“脏数据”。
    产生上述三类数据不一致的主要原因是并发操作破坏了事务的隔离性。
    并发控制的主要技术有封锁(Locking)、时间戳(Timestamp)和乐观控制法,商用的DBMS一般都采用封锁方法。

    封锁

    所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。
    基本的封锁类型有两种:
    1.排它锁(Exclusive Locks),简称X锁
    2.共享锁(Share Locks),简称S锁
    排它锁又称写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。
    共享锁又称读锁。若事务T对数据对象A加上S锁,则事务T可以读A但是不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

    活锁和死锁

    活锁

    如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的锁后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求…T2有可能永远等待下去,这就是活锁的情形。
    避免活锁采用的方法是先来先服务的策略。

    死锁

    1.死锁的预防

    通常有两种方法:1.一次封锁法 2.顺序封锁法
    一次封锁法:要求每个事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。
    存在问题:1.一次就讲以后要用到的全部数据加锁,扩大了封锁的范围,从而降低了系统的并发度。
    2.数据库中的数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难先景区地确定每个事务索要封锁的数据对象。
    顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
    存在问题:1.数据库系统中封锁的数据对象极多,并且随数据的插入、删除等操作不断变化,要维护这样的资源的封锁顺序非常困难,成本很高。
    2.事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁那些对象,因此也很难按规定的顺序去施加封锁。
    DBMS在解决死锁的问题上普遍采用的是诊断并解除死锁的方法

    2.死锁的诊断与解除

    1.超时法
    如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
    不足:1.有可能误判死锁,事务因为其他原因使等待时间超过时限,系统会误认为发生了死锁。
    2.时限若设置得太长,死锁发生后不能及时发现。
    2.等待图法
    事务等待图是一个有向图G=( T, U).T为结点的集合,每个结点表示正在运行的事务,U为边的集合,每条边表示事务的等待情况。
    事务等待情况动态反应了所有事务的等待情况。并发控制子系统周期性地生成事务等待图,并进行检测。如果发现图中存在回路,则表示系统中出现了死锁。
    DBMS的并发控制子系统一旦检测到系统中存在死锁,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,使其他事务得以继续运行下去。

    并发调度的可串行性

    DBMS对并发事务不同的调度可能会产生不同的结果,那么什么样的调度是正确的呢?显然,串行调度是正确的。执行结果等价于串行调度的调度也是正确的。这样的调度叫可串行化调度。

    可串行化调度

    定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行的执行这些事务时的结果相同,称这个调度策略是可串行化的。
    可串行性是并发事务正确执行的准则。

    冲突可串行化调度

    冲突操作是指不同的事务对同一个数据的读写操作和写写操作:
    Ri(x)与Wj(x) //事务Ti读x,Tj写x
    Wi(x)与Wj(x) //事务Ti写x,Tj写x
    其他操作是不冲突操作。
    一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc为冲突可串行化的调度。一个调度是冲突可串行化,一定是可串行化的调度。
    冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。

    两段锁协议

    在运用封锁方法时,对数据对象加锁时需要约定一些规则,例如何时申请封锁、持所时间、何时释放封锁等。这些规则被称为封锁协议。
    所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁:
    1.在对任何数据进行读、写操作之前,首先要申请并获得对该数据的加锁
    2.在释放一个封锁之后,事务不再申请和获得任何其他封锁
    两段锁的含义是,事务分为两个阶段,第一个阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二个阶段是释放封锁,也称为收缩阶段。在这阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。
    事务遵守两段锁协议是可串行化的充分条件,而不是必要条件。
    要注意两段锁协议和防止死锁的一次封锁法的异同之处。一次封锁法要求每个事物必须一次将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁遵守两段锁协议;但是两段锁协议并不要求事务必须将所有要是有的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。

    封锁的粒度

    封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一些物理单元:页、物理记录等。
    如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁。

    多粒度封锁

    多粒度树:多粒度树的根节点是整个数据库,表示最大的数据粒度。叶节点表示最小的数据粒度。
    多粒度封锁协议允许多粒度树种的每个节点被独立地加锁。对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁。因此,在多粒度封锁中一个数据对可能一两种方式加锁,显示封锁和隐式封锁。
    显示封锁是应事务的要求直接加到数据对象上的封锁;
    隐式封锁是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁。
    一般地,对某个数据对象加锁,系统要检查该数据对象是哪个有误显示封锁与之冲突;还要检查其所有上级结点,看本事务的显示封锁是否与该数据对象上的隐式封锁冲突;还要检查所有下级结点,看上面的显示封锁是否与本事务的隐式封锁冲突。

    意向锁

    意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对他的上层结点加意向锁。
    意向共享锁(IS锁)、意向排它锁(IX锁)、共享意向排它锁(SIX锁)
    IS锁
    如果对一个数据对象加S锁,表示它的后裔结点拟(意向)加S锁。
    IX锁
    如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。
    SIX锁
    如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX= S+IX。
    具有意向锁的多粒度封锁方法中任一事务T要对一个数据对象加锁,必须先对它的上层结点加意向锁。申请封锁时应该按自上而下的次序进行;释放封锁时应该按自下而上的顺序进行。

    基于时间戳的协议

    另一种决定事务可串行化次序的方法是事先选定事务的次序。其中最常用的方法是时间戳排序机制。

    时间戳

    对于系统中每个事务Ti,我们把一个唯一的固定时间戳和它联系起来,此时间戳记为TS(Ti)。该时间戳是在事务Ti开始执行前由数据库系统赋予的。若事务Ti已赋予时间戳TS(Ti),此时有一种新事务Ti进入系统,则TS(Ti) < TS(Tj)。实现这种机制可以采用下面这两个简单的办法:
    1.使用系统时钟的值作为时间戳:即事务的时间戳等于该事务进入系统时的时钟值。
    2.使用逻辑计数器,每赋予一个时间戳,计数器增加计数,即事务的时间戳等于该事务进入系统时的计数器值。
    要实现这个机制,每个数据项Q需要与两个时间戳值相关联:
    W-timestamp(Q)表示成功执行write(Q)的所有事务的最大时间戳
    R-timestamp(Q)表示成功执行read(Q)的所有事务的最大时间戳。

    时间戳排序协议

    保证任何有冲突的read或write操作按时间戳顺序执行。该协议运作方式如下:
    1.假设事务Ti发出read(Q)
    a.若TS(Ti) < W-timestamp(Q),则Ti需要读入的Q值已经被覆盖。因此,read操作被拒绝。Ti回滚。
    b.若TS(Ti)>=W-timestamp(Q),则执行read操作,R-timestamp(Q)被设置为R-timestamp(Q)与TS(Ti)两者的最大值。
    2.假设事务Ti发出write(Q)
    a.若TS(Ti) < R-timestamp(Q),则Ti产生的Q值是先前所需要的值,且系统已假定该值不会再产生。因此,write操作被拒绝,Ti回滚。
    b.若TS(Ti) < W-timestamp(Q),则Ti时图写入的Q值已经过时。因此,write操作被拒绝,Ti回滚。
    c.其他情况,系统执行write操作,将W-timestamp(Q)设置为TS(Ti)。
    如果事务Ti由于发出read或write操作而被并发控制机制回滚,则系统赋予它新的时间戳并重新启动。
    时间戳排序协议保证冲突可串行化,这因为冲突操作按时间戳顺序进行处理。
    该协议保证无死锁,因为不存在等待的事务。但是,当一系列冲突的段事务引起长事务反复重启时,可能导致肠事务饿死的现象。如果发现一个事务反复重启,与之冲突的事务应当暂时阻塞,以使该事务能够完成。
    该协议可能产生不可恢复的调度。然而,该协议可以进行扩展,用以下几种方法之一来保证调度可恢复:
    1.在事务末端执行所有的写操作能保证可恢复性和无级联性,这些写操作必须具有下述意义的原子性:在写操作正在执行的过程中,任何事物都不允许访问已写完的任何数据项。
    2.可恢复性和无级联性也可以通过使用一个受限的发封锁形式来保证,由此,对未提交数据项的读操作被推迟到更行该数据项的事务提交之后。
    3.可恢复性可以通过跟踪为提交写操作来单独包装,一个事物Ti读取了其他事物所写的数据,只有在其他事物都提交之后,Ti才能提交。

    基于有效性检查的协议

    有效性检查协议要求每个事物Ti在其生命周期中按两个或三个阶段执行,则取决于事务是一个只读事务还是一个更新事务。
    1.读阶段:在这一阶段中,系统执行事务Ti。个数据项值被读入并保存在事务Ti的局部变量中。所有write操作都是对局部临时变量进行的,并不对数据库进行真正的更新。
    2.有效性检查阶段:对事务Ti进行有效性测试,判断是否可以执行write操作而不违反可串行性。如果事务有效性测试失败,则系统终止这个事务。
    3.写阶段:若事务Ti已通过有效性检查,则保存Ti任何写操作结果的临时就被变量值被复制到数据库中。只读事务忽略这个阶段。
    为了进行有效性检测,我们需要知道事务Ti的各个阶段何时进行。为此,我们将三个不同的时间戳与事务Ti相关联。
    1.Start(Ti):事务Ti开始执行的时间
    2.Validation(Ti):事务Ti完成读阶段并开始其有效性检查的时间
    3.Finish(Ti):事务Ti完成写阶段的时间
    我们利用时间戳Validation(Ti)的值,通过时间戳排序技术决定可串行性排序。因此,值TS(Ti) = Validation(Ti)。并且若TS(Tj) < TS(Tk),则产生的任何调度必须等价于事务Tj出现在Tk之前的某个串行调度。选择Validation(Ti)而不是Start(Ti)作为事务Ti的时间粗是因为在冲突频度很低的情况下期望有更快的响应时间。
    事务Ti的有效性测试要求任何满足TS(Tk) < TS(Tj),的事务Tj必须满足下面两条件之一:
    1.Finish(Tk) < Start(Tj)。因为Tk在Tj开始之前完成其执行,所以可串行性次序得到了保证
    2.Tk缩写的数据项集与Tj所读数据项集不相交,并且Tk的写阶段在Tj开始其有效性检查阶段之前完成。这个条件保证Tk与Tj的写不重叠。因为Tk的写不影响Tj的读,又因为Tj不可能影响Tk的读,从而保证了可串行性次序。
    在有效性检查机制中,由于事务乐观的执行,假定他们能够完成执行并且最终有效,因此也称为乐观的并发控制机制。与之相反,封锁和时间戳排序是悲观的,因为当他们检测到一个冲突时,它们强迫事务等待或回滚,即使该调度有可能是冲突可串行的。

    展开全文
  • 数据库并发控制

    千次阅读 2012-12-28 19:51:42
    1. 在数据库中为什么要并发控制?  答:数据库是共享资源,通常有许多个事务同时在运行。  当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不...

    1. 在数据库中为什么要并发控制?

      答:数据库是共享资源,通常有许多个事务同时在运行。

      当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。

    2. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?

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

      (1)丢失修改(Lost Update)

      两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。

      (2)不可重复读(Non-Repeatable Read)

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

      (3)读“脏”数据(Dirty Read)

      读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。

      避免不一致性的方法和技术就是并发控制。最常用的并发控制技术是封锁技术。

    3. 基本的封锁类型有几种?试述它们的含义。

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

      排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

      共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

      

    4.三级封锁协议的主要区别是什么? 

      答: 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。

       二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。

       三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

      三级协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁(即持锁时间的长短)。      

    5. 什么样的并发调度是正确的调度?

      答:可串行化(Serializable)的调度是正确的调度。

      可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。

      

    6. 试述两段锁协议的概念。

      答:两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。

     · 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;

     · 在释放一个封锁之后,事务不再申请和获得任何其他封锁。

    展开全文
  • 悲观并发控制 一个锁定系统,可以阻止用户以影响其他用户的方式修改数据。如果用户执行的操作导致应用了某个锁,只有这个锁的所有者释放该锁,其他用户才能执行与该锁冲突的操作。这种方法之所以称为悲观并发控制,...

    悲观并发控制
    一个锁定系统,可以阻止用户以影响其他用户的方式修改数据。如果用户执行的操作导致应用了某个锁,只有这个锁的所有者释放该锁,其他用户才能执行与该锁冲突的操作。这种方法之所以称为悲观并发控制,是因为它主要用于数据争用激烈的环境中,以及发生并发冲突时用锁保护数据的成本低于回滚事务的成本的环境中。 
    乐观并发控制 
    在乐观并发控制中,用户读取数据时不锁定数据。当一个用户更新数据时,系统将进行检查,查看该用户读取数据后其他用户是否又更改了该数据。如果其他用户更新了数据,将产生一个错误。一般情况下,收到错误信息的用户将回滚事务并重新开始。这种方法之所以称为乐观并发控制,是由于它主要在以下环境中使用:数据争用不大且偶尔回滚事务的成本低于读取数据时锁定数据的成本。
    具体的区别与实例说明如下:

    悲观并发控制:假设A和B需要在SCC(Source Code Control)上修改同一个文件,那么在A锁定这个文件并修改的过程中,B无法修改这个文件,他只能等待A解锁文件后,他才能修改。由此可见,悲观并发控制是强调控制在前,确保整个过程不会出现文件版本的冲突。这样做会使得系统效率损耗在加锁机制上,尤其是加锁机制需要用到低速的外部存储(比如FileLocking)时,然而这样做就降低了事务的并发性,尤其是事务之间本来就不存在冲突的情况下。例如在A修改数据的时候,B只能等待。

    由此可见,悲观并发控制通过使用显式的加锁机制或者时间戳,对每一个事务进行增量同步校验。如果加锁机制的成本较高的话,悲观并发控制就会出现一些弊端。首先就是效率问题,尤其是使用低效率的外部存储系统实现加锁机制时,这样的问题会更加突出。其次,在不会出现冲突的事务处理(例如只读型事务)中,使用加锁机制就显得没有必要了,这样做只能增加系统负载。再次,这种方式降低了系统的并发性。

    乐观并发控制:同样假设A和B需要在SCC上修改同一个文件,他们都将这个文件获取到自己的机器上,A修改完以后,就把文件上传到SCC上了,此时B也修改完了,当他也打算将文件上传时,系统会告知B,已经有人上传了,并出现一个错误。剩下的问题只能由B手动解决,例如B可以在SCC上将文件中更改的内容再次复制一遍。乐观并发控制使得系统效率损耗在事务的后期处理中,比如B必须手动的去修改他已经修改过的东西,然而这种控制方式在极少出现冲突的多事务处理中显得十分高效。

    乐观并发控制将事务分为三个阶段:读取阶段、校验阶段以及写入阶段。在读取阶段,事务将数据写入本地缓冲(如上所述,A和B将文件都获取到自己的机器上),此时不会有任何校验操作;在校验阶段,系统会对所有的事务进行同步校验(比如在A或者B打算,但还没有,往SCC上写入更改后的文件时);在写入阶段,数据将被最终提交。在完成读取阶段以后,系统会对每个事务分派一个时间戳。

    悲观并发控制中一个常见的问题就是死锁。例如A在修改文件T1,B在修改文件T2,他们分别锁定了这两个文件,假设T1和T2内容相关,B在修改T2的时候发现他还需要修改T1,可是T1却被A锁定;与此同时,A在修改T1的时候也发现了他还需要修改T2,可是T2又被B锁定了,这样就出现了死锁。当然,在实际操作中,这种情况可以由A和B协商解决,但是在错综复杂的多事务处理环境中,死锁将使得问题变得非常复杂。

    参考链接:https://www.cnblogs.com/Fandyx/archive/2012/07/14/2591153.html

    展开全文
  • 数据库并发控制之并发调度

    千次阅读 2018-10-25 01:08:22
    一、并发调度的可串行性 二、两段锁协议 三、封锁的粒度 四、其他并发控制机制
  • 概述:我们可以使用两种形式的并发控制策略:乐观并发控制和悲观并发控制。 假设martin和David同时都要编辑Customer文件。如果使用乐观锁策略,他们两个人都能得到一份文件的Copy,并且可以自由编辑文件。假设David...
  • 3 关于 Greenplum中的并发控制

    千次阅读 2017-07-11 22:19:42
    3 关于 Greenplum中的并发控制 Greenplum的数据库使用PostgreSQL的多版本并发控制(MVCC)模型来管理堆表的并发事务。 数据库管理系统的并发控制不但能保证并发查询的执行并获得正确的结果,同时还能确保数据库的...
  • 乐观并发控制

    千次阅读 2018-10-13 21:07:04
    乐观并发控制(optimistic concurrency control, OCC) 乐观并发是一个应用于事务系统(eg,关系型数据库管理系统与软件内存事务)的并发控制方法。 OCC假设大多数的事务可以在不互相干扰的情况下完成。 当事务...
  • 第十一章 并发控制 1.事务并发 多用户数据库系统的存在(允许多个用户) 特点:在同一时刻并发运行时的事务数可达数百个 2.并发操作带来的数据不一致性 并发操作带来的数据不一致性包块丢失修改、不可重复读和...
  • 数据库并发控制及SQL Server的 并发控制机制 在多用户和网络环境下,数据库是一个共享资源,多个用户或应用程序同时对数据库的同一数据对象进行读写操作,这种现象称为对数据库的并发操作。显然并发操作可以充分...
  • 数据库并发控制技术

    千次阅读 2018-08-25 14:27:19
    事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元,也是恢复和并发控制的基本单位。 事务处理技术主要包括数据库恢复技术和并发控制技术。本篇博文主要总结下并发控制技术。 事务:是用户定义的一个...
  • 数据库 - 并发控制

    千次阅读 2015-05-12 17:30:51
    并发控制机制的任务对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性多用户数据库系统的存在 允许多个用户同时使用的数据库系统 飞机定票数据库系统 银行数据库系统 特点:在同一时刻并发运行的...
  • 事务与并发控制

    千次阅读 2020-01-21 22:31:01
    事务与并发控制
  • Dubbo并发控制

    千次阅读 2016-08-08 15:53:24
    服务端并发执行(占用线程池线程数)不能超过10个。 ``` 2.限制客户端并发控制。 “`
  • 多版本并发控制

    千次阅读 2019-01-15 08:30:15
    多版本并发控制,讨论的不是指的一个软件同时发行多个版本怎么进行管理的问题,而是MySQL中的MVCC。 MVCC,multiple version concurrent control,多版本并发控制。 可以认为MVCC是行级锁的一个变种,但它在很多...
  • GoLang 并发控制

    千次阅读 2016-04-21 13:36:56
    GoLang中控制并发有两种方式: sync.WaitGroup 和 channel 下面是两种方法的对比 sync.WaitGroup,该方法最大优点是Wait()可以阻塞到队列中的所有任务都执行完才解除阻塞,但是它的缺点是不能够指定并发协程数量...
  • mysql并发控制

    千次阅读 2019-03-06 12:36:35
    解释: Read uncommitted(未提交读),就是说一个线程修改了某一个数据之后,还没有提交之前,就被其他线程读到修改后的数据,这样一来肯定会产生问题 Read committed(提交读),(大多数数据库系统的默认隔离级别...
  • ES并发控制

    2018-07-16 22:46:09
    并发控制 ES采用是乐观锁,主要靠version来控制也可以用别的数据库 http://m635674608.iteye.com/blog/2361304 ...
  • 第3章 关于 Greenplum 中的并发控制

    千次阅读 2016-07-02 22:44:12
    第3章 关于 Greenplum 中的并发控制   Greenplum的数据库使用PostgreSQL的多版本并发控制(MVCC)模型来管理并发事务堆表。 在数据库管理系统的并发控制允许的并发查询与正确的结果完成,同时确保数据库的完整性...
  • Mysql并发控制

    万次阅读 2012-04-30 12:43:31
    最近在看Mysql的并发控制,事务处理等知识,做些整理。 并发控制目的是当多个连接对数据库进行修改时保证数据的一致性。现在mysql的InnoDB在update,delete时使用行级锁,对于select会结合MVCC保证一致性。 1...
  • 数据库并发控制机制

    千次阅读 2019-10-04 17:17:15
    所以 数据库管理系统需要对这些并发操作进行正确的调度,并发控制机制就是用正确的方式调度并发操作,使一个用户事务不收其他事务的干扰。 并发控制的技术主要有封锁,时间戳,乐观控制发和多版本并发控制等 1. 封锁...
  • Jackrabbit并发控制

    千次阅读 2015-09-21 10:01:57
    Apache Jackrabbit内部的并发模型相当复杂,在JackRabbit 1.x发布周期内报告并修复了大量的死锁问题。...注意此文是从架构层面审阅并发控制,并不关注像个别类或组件的多线程安全之类的问题。 此review是基于JackR
  • 关系数据库——并发控制

    千次阅读 多人点赞 2019-12-02 14:04:03
    并发控制 多用户数据库:允许多个用户同时使用的数据库(订票系统) 不同的多事务执行方式: 1.串行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束后方能运行。 2.交叉并发方式: 单处理机...
  • Oracle并发控制

    千次阅读 2018-10-18 10:09:11
    并发与锁定 当多用户同一时刻访问相同的数据库资源时,将产生并发并发极易破坏数据的一致性。锁定是处理并发的重要手段,用户在修改某一资源前,必须首先获得资源的修改权。而这种修改权具有排他性。 并发与锁定...
  • 全面分析 MySQL并发控制

    千次阅读 多人点赞 2020-09-30 21:07:30
    文章目录并发控制MySQL逻辑架构锁读写锁 并发控制 为什么会提出这个话题?不言而喻。 无论何时,只要有多个查询需要在同一时刻查询数据,都会产生并发问题。 我也不多废话,如果是进来找代码实现的,请移步:不是你...
  • php redis 并发控制

    千次阅读 2016-04-21 13:45:57
    针对并发控制可以使用 memcacheq ,redis channle 等方式处理 这里我单单的说一下redis 怎么去控制并发 redis控制并发主要采用 redis list api 中的 lPush llen lPop 这三个函数  lLen - 获得列表的长度   ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 560,431
精华内容 224,172
关键字:

关于并发控制