并发调度的可串行性:可串行化调度、冲突可串行化调度、两段锁协议

这篇具有很好参考价值的文章主要介绍了并发调度的可串行性:可串行化调度、冲突可串行化调度、两段锁协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内容主线:

冲突可串行化调度,数据库,追梦算法

并发调度的可串行性

        DBMS对并发事务不固的调度可能会产生不同的结果,有正确的,有不正确的。显然串行调度是正确的。

        执行结果等价于串行调度的调度也是正确的,这样的调度叫做可串行化调度

        1、可串行化调度

        定义:

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

        可串行性(Serializability):

        并发事务正确调度的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确的调度。 

        例:

        现在有两个事务,分别包含下列操作:
        事务T1:读B;A=B+1;写回A
        事务T2:读A;B=A+1;写回B
        设A,B的初值均为2。
        (p317图11.7串行调度、可串行化的调度、不可串行化的调度) 

冲突可串行化调度,数据库,追梦算法

         2、冲突可串行化调度

        具有什么样性质的调度是可串行化的调度?如何判断某个调度是可串行化的调度?下面给出判断可串行化调度的充分条件
        设有两个事务Ti和Tj,其调度为S,S中有两个相邻的语句li和lj(指read(读)或write(写)语句),分别来自Ti和Ti。如果li和lj不同的数据操作,那么交换li和Ii的次序丝毫不影响调度执行的结果。当li和Ij对同一数据Q操作时,就不一定了。下面就li和Ij对同一数据进行操作,讨论其次序是否可交换

        (1)li=read(Q),j=read(Q)。

        此时事务Ti和Tj读到同样的Q值可忽视li和lj的先后次序

        (2)li=read(Q),Ij=write(O)。

        在调度S中,如果li在lj之前,那么Ti没有读到Tj中写回的Q值,如果lj在li之前,那么Ti读了Tj中写回的Q值。这样,li和lj的次序是很重要的。
        (3)li=write(Q),Ij=read(Q)。

        情况与(2)类似。
        (4)li=write(Q),Ij=write(Q)。

        由于li和lj都是写操作,因此对事务Ti和Tj都没有影响。但数据库中保存的是Ti和Tj后一个写操作的结果,因而li和lj的次序对调度S中中随后的read语句有影响。如果调度中没有其它写语句,那么li和lj的次序直接影响到事务结束后数据库中的值。 

        上面只有第(1)种情况中,与li和lj的先后次序无关,其它都有关系。

        定义:li和lj分别是并发事务Ti和Tj中的read或write语句,并在并发调度中相邻。当li和j是对同一数据操作时,并且致少有一个是write语句,我们称li和ij是一对“冲突”的语句,否则称为“非冲突”的语句。

        在调度S中,有一对相邻的语句是“非冲突”的语句,那么它们的先后次序可以交换。交换后产生的新调度S和S等价。  

        例:

T1       T2  
①read(A)
②write(A)
read(A)
write(A)
⑤read(B)
⑥write(B)
read(B)
write(B)

        调度如下:

        Sc=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)

        w1(A)r2(A)此处:w1(A):事务T1 对A 写操作 r2(A) 事务T2 对A读操作  两者为相邻操作且同对A 操作,所以此时为冲突语句,顺序不可以交换!

        w2(A)r1(B)w1(B) :此时是对不同数据进行读写,不是冲突语句,所以此时可以交换顺序

        Sc=r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B)

        S`c=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A) r2(B)w2(B)

        将Sc中不冲突的调度的顺序进行调整,变成了S`c先执行事务T1 再执行事务T2,为串行调度
        在这个并发调度中,事务T1中的w1(A)和T2中的r2(A)是一对冲突的语句,次序不能交换。

        交换非冲突语句:

        [1]T2中的w2(A)和T1中的r1(B)w1(B)交换;

        [2]T2中的r2(A)和T1中的r1(B)w1(B)交换;

        等价于先执行T1后执行T2的串行调度

        定义:

        如果调度S`是从调度S通过交换一系列的非冲突语句得到,那么称S和S是一对“冲突等价”调度。如果调度S与某个串行调度是“冲突等价”,那么称调度S是“冲突可串行化”的调度。 

         冲突可串行化的调度:可以推出这个调度是可串行化的调度

        可串行化的调度:不能推出这个调度是冲突可串行化的调度

        两段锁协议

        为了保证并发调度的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。目前DBMS普遍采用两段锁(Two-Phase Locking,简称2PL)协议的方法实现并发调度的可串行性,从而保证调度的正确性。

        两段锁协议是封锁协议的一种。

        【封锁协议(LockingProtocol):

        在运用封锁方法时,对数据对象加锁时需要约定一些规则,例如何时申请封锁、持锁时间、何时释放封锁等。我们称这些规则为封锁协议

        约定不同的规则,就形成了各种不同的封锁协议。两段封锁协议是最常用的一种封锁协议,理论上已经证明使用两段封锁协议产生的是可串行化调度。】 

        两段锁协议(考):

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

        1)在对任何数据进行速、写操作之前,事务首先要申请并获得对该数据的封锁,

        2)在释放一个封锁之后,事务不再获得任何其他封锁。

        “两段”锁的含义事务分为两个阶段:

        第一阶段是获得封锁,也称为扩展阶段:

        在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但不能释放任何锁, 

         第二阶段是释放封锁,也称为收缩阶段。

        在这阶段,事务可以释放任何数据项上的任何类型的锁,但不能再申请任何锁

        例如:

        事务Ti遵守两段锁协议,其封锁序列是:
        Slock A…Slock B… Xlock C…(第一段锁协议:加锁)Unlock B….Unlock A….UnlockC:(释放封锁阶段:只能释放封锁)
        事务Tj不遵守两段锁协议,其封锁序列是:
        Slock A(获得锁) .…. Unlock A(释放锁)…. Slock B(获得锁)… Xlock C… Unlock C(释放锁)….Unlock B:

        可以证明,并发执行的所有事务遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。(p301验证例子)。所有遵守两段锁协议的事务,其并发执行的结果一定是正确的

        事务遵守两段锁协议是可串行化调度的充分条件(遵循两端锁协议=>可串行化调度),而不是必要条件(可串行调度!=>遵循两段锁协议)。 文章来源地址https://www.toymoban.com/news/detail-565333.html

封锁粒度 (自己看书了解):需要掌握多粒度封锁、意向锁

到了这里,关于并发调度的可串行性:可串行化调度、冲突可串行化调度、两段锁协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 串行协议--RS-485协议

    RS-485多机通信的组网方式 典型的总线式通信方式 菊花链式多机通信方式 每个节点智能接收上个节点发送的数据,只能向下一个节点发送数据。 星形RS-485多机通信方式 要实现星形组网方式,必须使用RS-485的集线器(HUB),可以保证某一路或者多路RS-485总线损坏后不影响其他总线

    2024年01月16日
    浏览(27)
  • 串行通信协议---HART协议

    实际应用中,HART协议是仅次于Modbus协议的最接近统一现场总线的标准,主要是在4~20mA电流信号上面叠加数字信号,物理层采用Bell 202标准的FSK技术成功实现模拟信号和数字信号双向同时通信而互不干扰。HART协议规定了传输的物理形式、消息结构、数据结构和一系列操作指令,

    2024年02月07日
    浏览(34)
  • 串行通信 - Modbus协议

    Modbus协议采用的是主-从通信模式。 Modbus协议主要有Modbus RTU、Modbus ASCII和Modbus TCP三种。前两者均支持RS-485总线协议。其中RTU采用二进制数据表达形式、数据结构紧凑,通信效率高,应用广泛。 Modbus的三种传输模式 ASCII 模式:数据中每8bit的字节作为一个ASCII码发送。字符发送

    2024年02月09日
    浏览(34)
  • IIC协议——同步半双工串行通信方式

    2023.4.22 IIC : Inter-Integrated Circuit ,集成电路总线 半双工协议 多主设备,多从设备。通过地址索引,I2C可以使能所需从设备 实现不同集成电路组件之间的控制功能 接口减少,控制简单,只需要两条总线 通信速率高 多主控,但任意时刻只有一个主控有效。最大主设备——无限

    2023年04月23日
    浏览(27)
  • 串行通信协议UART,IIC,SPI的对比分析

    常见串行通信有三个,即UART (Universal Asynchronous Receiver/Trasmitter,异步串行收发器),IIC,SPI。下面将分别介绍三种串行通信的过程。 UART是一种异步全双工串行通信协议。UART通信就是常说的串口通信。其数据传输方式为: 1.串口通信的信号线只需要两条线就可以完成,即发

    2024年02月13日
    浏览(23)
  • Elasticsearch并发写入版本冲突解决方案

    搜索公众号, AmCoder 干货及时送达👇  众所周知,es经常被用于存储日志数据,其中在某些场景下,日志产生的时机不同,并且需要将多类具备关联关系的日志写入同一个document,就会带来同一个文档可能会被其它文档覆盖,或者missing等问题。 大家都知道es是不支持事务的,

    2023年04月19日
    浏览(41)
  • 串行通信协议(I2C、SPI、UART、SCCB、CAN)

    推荐一部书,在这本书里面介绍了I2C、SPI、UART和CAN等通信协议,写的蛮不错的。 串行通信 :设备与设备之间,传输数据按顺序依次1bit位接1bit位进行传输。 并行通信 :设备与设备之间,通过多条传输线,可以同时传输多个bit位的信号。 1.简单的双向两线制总线协议标准、半

    2024年02月14日
    浏览(47)
  • 并发冲突导致流量放大的线上问题解决

    事故现象 生产环境,转账相关请求失败量暴增。 直接原因 现网多个重试请求同时到达 svr,导致内存数据库大量返回时间戳冲突。业务方收到时间戳冲突,自动进行业务重试,服务内部也存在重试,导致流量放大。 转账 首先我们一起了解一下转账。转账请求在支付场景中的

    2024年02月13日
    浏览(29)
  • 动画图解常见串行通讯协议:SPI、I²C、UART、红外分析

    一、 SPI传输                                                          图1:SPI 数据传输                                                      图1.2:SPI数据传输(2) ​                                                 图1.3: SPI时序信号 二、 I²C传输 图

    2024年02月03日
    浏览(29)
  • MySQL实战:解密乐观并发控制,确保数据操作不冲突

      概述: 乐观并发控制是处理数据访问并发的一种策略,通过在更新前检查版本号或时间戳,确保数据在事务间保持一致性。在MySQL示例中,通过比对版本号,如果发现其他事务已更新数据,则拒绝当前事务的修改,避免潜在的并发冲突。这种机制提高了数据一致性,典型应

    2024年03月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包