精华内容
下载资源
问答
  • 并发控制的主要技术有哪些
    千次阅读
    2019-11-23 19:18:15

    数据库是一个共享资源,应该允许多个用户程序并行地存取数据,当对数据库进行并行操作时,有可能出现数据不一致的情况。

    并行操作:在单处理机系统中,事务的并行执行实际上是这些并行事务的操作轮流交叉进行。

    为保证事务并发执行的正确,必须要有一定的调度手段以保障事务并发执行中一事务执行时不受其他事务的影响。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。

    并发控制的主要技术是封锁(locking)、时间戳(Timestamp)和乐观控制法。封锁是实现并发控制的一个非常重要的技术,
    所谓封锁就是事务T在对某个数据对象(表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能存取或更新此数据对象。封锁一般由DBMS自动执行。

    最基本的封锁模式有两种
    排它锁(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。
      书山有路勤为径,学海无涯苦作舟,学习是一个积累的过程,希望我们共同进步,同时写的有问题的地方,希望大家指出!

    更多相关内容
  • 2.论述分布式并发控制技术面临的主要问题。 论述使用锁实现分布式并发控制技术要点。包括:锁的种类;锁相容性矩阵;全局锁调度器的作用与结构特点;加锁准则与算法;死锁及其预防技术;等。 3.选择一个实用的...
  • 事务并发执行带来的问题 会产生多个事务同时存取同一数据情况 可能会存取和存储不正确的数据,破坏事务...并发控制主要技术封锁、时间戳、乐观控制法。 二、封锁: 一个事务对某个数据对象加锁后究竟拥有什么样
  • 并发控制课后答案-简述并发控制.pdf
  • 事务并发控制

    2013-07-26 21:27:40
    并发控制指的是当多个用户同时更新运行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响...
  • 基于模型检测技术提出了一种新的乐观并发控制协议XOCC-MC。通过将XML文档对应的DTD文档转换为系统模型,将事务操作中的XPath转换为CTL公式,利用模型求值判断节点间是否存在A/D关系,进而根据冲突矩阵判断事务之间的...
  • #资源达人分享计划#
  • 并发控制主要技术有:封锁、时间戳、乐观控制法、多版本并发控制等 并发操作带来的数据不一致性: 1 排他锁/写锁,X锁若事务T对数据对象A加上X锁,则只允许事务T读取和修改A事务T释放A上的锁之前:其他事务不能读取和...

    1、并发控制:为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度

    并发控制的主要技术有:封锁、时间戳、乐观控制法、多版本并发控制等
    并发操作带来的数据不一致性:

    1. 丢失修改:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失
    2. 不可重复读:指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果
    3. 读脏数据:事务T1修改某一数据后并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致
       

    2、并发控制的基本方法:封锁(锁、S锁)

            1  排他锁/写锁,X锁

    若事务T对数据对象A加上X锁,则只允许事务T读取和修改A

    事务T释放A上的锁之前:其他事务不能读取和修改A,不能再对A加任何类型的锁

            2  共享锁/读锁,S锁

    若事务T对数据对象A加上S锁,则事务T可以读取A,但不能修改A

    事务T释放A上的S锁之前:其他事务可以读取A,可以对A加S锁,但不能修改A,也不能对A加X锁封锁类型的相容矩阵:

     3、封锁协议:约定何时申请锁/S锁、持续时间、何时释放等等

    • 一级封锁协议

    事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放

    • 二级封锁协议

    事务T在修改数据R之前必须先对其加×锁(一级封锁协议),并且其他事务在读取数据之前必须先对其加S锁,读完后即可释放S锁

    • 三级封锁协议

    事务T在修改数据R之前必须先对其加X锁(一级封锁协议),并且其他事务在读取数据之前必须先对其加S锁,直到事务结束才释放(二级封锁协议是读完就能释放)

    不同级别的封锁协议和一致性保证:

     4、活锁和死锁

    活锁:

    事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待;T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待;T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求..…..…T2有可能永远等待,产生活锁
    避免活锁:采用先来先服务的策略


    死锁:

    事务T1封锁了数据R1,T2封锁了数据R2,T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁,接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1,释放R1上的锁,这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁


    解决活锁的方法:

    • 死锁的预防
    1. 一次封锁法:每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行
    2. 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务按这个顺序实施封锁
    • 死锁的诊断和解除

    诊断:(1)超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
                (2)等待图法:构建事务等待图(有向图:节点表示运行的事务,边表示事务等待的情况),存在回路即死锁解除:选择一个处理死锁代价最小的事务,将其撤销(UNDO),释放此事务持有的所有的锁
     

    5、可串行化调度:多个事务并发执行的结果=这些事务按某种次序串行执行的结果
     

    一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。例如现有事务T1和T2,若T1与T2的并发执行结果与先T1后T2相同,或者与先T2后T1相同,那么这个调度就是正确的,否则就是错误的
     

    6、冲突可串行化调度

    冲突操作:指不同的事务对用一个数据的读写操作(读和写)和写写操作(写和写)
    不同事务的冲突操作和同一事物的两个操作是不能交换的,如果发生交换,自然会发生错误。基于此,如果调度能保证冲突操作的次序不变,就称为冲突可串行化的调度。冲突可串行化调度一定是可串行化调度。(但是注意,可串行化调度也有可能不满足冲突可串行化)

    7、两段锁协议(2PL):所有事务必须分两个阶段对数据项加锁和解锁

    1. 获得封锁(扩展阶段)∶在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
    2. 释放封锁(收缩阶段)︰在释放一个封锁之后,事务不再申请和获得任何其他封锁
       

    若并发执行的所有事务均遵守两段锁协议,则对这些事物的任何并发调度策略都是可串行化的
     

    展开全文
  • 往往大数据量,高并发时, 瓶颈都在数据库上, 好多人都说用数据库的复制,发布, 读写分离等技术, 但主从数据库之间同步时间延迟.
  • 数据库恢复技术并发控制.pdf
  • 数据库并发控制

    千次阅读 2020-09-20 21:23:14
    数据库并发控制单机2PL (2 Phase Locking)OCC (Optimistic Concurrency Control)MVCC (Multi Version Concurrency Control)分布式2PC(Two-phaseCommit)3PC(Three-phase commit)TCCGTS 在数据库中,并发控制是指在多...


    在数据库中,并发控制是指在多个进程同时对数据库进行操作时,如何保证事务的一致性和隔离性的同时,实现最大程度地并发。
    当多个进程同时对数据库进行操作时,会出现3种冲突情形
    读-读,不存在问题
    读-写,可能遇到脏读 ,幻读等
    写-写,可能丢失更新
    要解决冲突,一种办法是是锁,即基于锁的并发控制,比如2PL,这种方式开销比较高,而且无法避免死锁

    单机

    2PL (2 Phase Locking)

    两阶段锁,是一种悲观并发控制,即在一个事务里面,分为加锁(lock)阶段和解锁(unlock)阶段
    第一阶段:获得锁的阶段,称为扩展阶段
    第二阶段:释放锁的阶段,称为收缩阶段

    加锁阶段,主要是用共享锁(读锁)和排它锁(写锁)

    1. 读锁:对数据项加读锁(共享锁),读锁不阻塞其他事务
    2. 写锁:写锁(排他锁)不允许对给定资源进行读和写操作

    优点:

    1. 维护锁开销较小时、数据冲突较少时性能较好

    缺点:

    1. 加锁协议开销大
    2. 为了避免死锁,额外增加死锁检测
    3. 在持有锁的情况下可能会等待I/O操作,会降低系统的并发吞吐量
    4. 第一阶段加锁后影响了其他事务的读写操作,第二阶段释放了数据项上的锁之后,才能运行其他要操作相同数据项的事务
    5. 很多真实的业务应用场景都是高并发. 低竞争的

    在2PL的基础上,可延伸为:
    S2PL(Strict 2PL),在2PL的基础上,写锁保持到事务结束
    SS2PL(Strong 2PL),在2PL的基础上,读写锁都保持到事务结束

    OCC (Optimistic Concurrency Control)

    OCC是在2PL并发控制存在比较多缺点的基础上提出,是一种乐观并发控制,用来解决写-写冲突的无锁并发控制,OCC认为事务间争用没有那么多,所以先进行修改,在提交事务前,检查一下事务开始后,有没有新提交改变,如果没有就提交,如果有就放弃并重试
    实现分为三阶段:

    1. Read Phase, 对于读,放到Read Set,对于写,把写记到临时副本,放到Write Set。因为写是写到临时区的,属于未提交结果,其它事务读不到
    2. Validation Phase,重扫Read Set,Write Set,检验数据是否满足Isolation Level,如果满足则Commit,否则Abort
    3. WritePhase,或者叫做Commit Phase,把临时副本区的数据更新到数据库中,完成事务提交

    优点:

    1. 不需要维护锁
    2. 数据不冲突时吞吐量比较高

    缺点:

    1. 事物回滚比较高

    OCC适用于低数据争用,写冲突比较少的环境。

    扩展阅读 理论研究-BOCC/FOCC

    BOCC-检查待验证事务的读集是否与事务读取阶段完成的事务的写集有交集
    FOCC-检查待验证事务的写集是否与当前活跃事务的读集有交集

    MVCC (Multi Version Concurrency Control)

    多版本并发控制(MVCC)是一种用来解决读-写冲突的无锁并发控制,简单来说是使用版本号控制数据,为每个修改保存一个版本号,以对表数据的读写互不阻塞,增大并发量。
    读操作不用阻塞写操作,写操作不用阻塞读操作,避免了脏读和不可重复读

    InnoDB中MVCC的实现是通过在每一行记录后面保存两个隐藏的列来实现: DATA_TRX_ID 、 DATA_ROLL_PTR
    每开始一个新事务,版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行纪录的版本号进行比较

    ColumnLengthremark
    DATA_TRX_ID6记录最近更新这条行记录的事务ID
    DATA_ROLL_PTR7回滚段(rollback segment)的指针,InnoDB便是通过这个指针找到之前版本的数据
    DB_ROW_ID6行标识(隐藏自增ID),如果表没有主键,InnoDB会自动生成一个隐藏主键

    优点:
    1、读写互不阻塞,回滚率也比OCC好

    1. MVCC手段只适用于Msyql隔离级别中的读已提交(Read committed)和可重复读(Repeatable Read)
    2. Read uncimmitted存在脏读,即能读到未提交事务的数据行,所以不适用MVCC,原因是MVCC的创建版本和删除版本只要在事务提交后才会产生
    3. Seriallizable会对所涉及到的表数据加锁,不存在行的版本控制问题

    多版本并发控制可以结合基于锁的并发控制来解决写-写冲突,即MVCC+2PL
    也可以结合乐观并发控制来解决写-写冲突,即MVCC+OCC。

    Transactional Information Systems
    图片

    分布式

    上面几种并发控制都是基于单机,在分布式事务系统架构下的并发控制又有以下几种并发控制

    2PC(Two-phaseCommit)

    二阶段提交(Two-phaseCommit),基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。二阶段提交也被称为是一种协议(Protocol))
    第一阶段:准备阶段(投票阶段)

    1. 协调者向所有的参与者发送是否可以执行提交操作,并开始等待各参与者的响应
    2. 各个参与者节点执行本地事务操作,但在执行完成后并不会真正提交数据库本地事务,而是先向协调者发送确认信息
    3. 各参与者向协调者反馈各事务操作结果的响应

    第二阶段:提交阶段(执行阶段)

    1. 成功,只有所有参与者反馈成功才会执行提交,释放所有事务处理过程中使用的锁资源
    2. 失败/超时,直接给每个参与者发送回滚(Rollback)消息
    协调者
    应用A
    应用B
    应用N..
    数据库A
    数据库B
    数据库N..
    确认
    成功
    失败/超时
    commint
    rollback

    缺点:

    1. 同步阻塞问题
      无论是在第一阶段的过程中,还是在第二阶段,所有参与节点都是事务阻塞型的,只有当所有节点准备完毕,协调者才会通知进行全局提交

    2. 单点故障
      当协调者发生故障,所有的参与者会一直阻塞下去

    3PC(Three-phase commit)

    三阶段提交(Three-phase commit),也叫三阶段提交协议(Three-phase commit protocol),是二阶段提交(2PC)的改进版本,三阶段提交协议(3PC)主要是为了解决两阶段提交协议的阻塞问题
    待完善

    LCN(Lock Control Notify)

    LCN 一种基于java代理协调技术的分布式事务系统,并不生产事务,LCN 只是本地事务的协调工。LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务
    优点:

    1. 兼容SpringCloud、Dubbo
    2. 基于切面的强一致性事务框架
    3. 高可用,使用简单,低依赖,代码完全开源
    4. 事务补偿机制,服务故障或挂机再启动时可恢复事务

    主要模式:

    TCC(Try、Confirm、Cancel)

    TCC方案其实是2PC的一种改进。其将整个业务逻辑的每个分支显式的分成了Try、Confirm、Cancel三个操作
    Try:完成业务的准备工作,confirm:完成业务的提交,cancel:完成事务的回滚
    github地址
    LCN原理

    GTS(Global Transaction Service)

    全局事务服务(Global Transaction Service,简称 GTS)是阿里推出的分布式事务处理方案,将分布式事务问题从业务中剥离出来,作为一个独立的技术切面来单独管理,以服务的形式给构建

    消息中间件

    消息一致性方案是将本地操作和发送消息放在一个事务中,保证本地操作和消息发送要么两者都成功或者都失败。下游应用向消息系统订阅该消息,收到消息后执行相应操作

    待完善

    by: 梁振波

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

    2022-05-12 09:05:00
    并发操作带来的问题 丢失修改:两个业务对同一个数据进行修改,导致事务A对数据库的修改被事务B的修改所覆盖。 不可重复读:事务对同一数据进行两次读取的结果不同。原因是两次读取的间隙数据被另一个事务...

    并发操作带来的问题

    • 丢失修改:两个业务对同一个数据进行修改,导致事务A对数据库的修改被事务B的修改所覆盖。

    • 不可重复读:事务对同一数据进行两次读取的结果不同。原因是两次读取的间隙数据被另一个事务修改了

    • 读脏数据:事务读取了其他事务修改的数据,但是这个修改后来又被撤销了,这个数据就是被其他事务丢弃的数据

    并发调度的可串行性(*)

    • 多个事务的并发执行是正确的,当且仅当其结果与某一次串行执行的结果一致,称这种调度为可串行化调度

    • 可串行性是并发事务正确性的准则。即一个并发调度,当且仅当它是可串行化的才认为是正确调度

    并发控制技术

    并发事务如果对数据读写时不加以控制,会破坏事务的隔离性和一致性。为了保持事务的隔离性,系统必须对事务之间的相互作用加以控制,最典型的方式就是加锁

    • 排它锁(Exclusive Locks, 简称X锁):也称为写锁,用于对数据进行写操作时进行锁定。如果事务T对数据A加上X锁后,就只允许事务T对数据A进行读取和修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的锁。

    • 共享锁(Share Locks, 简称S锁):也称为读锁,用于对数据进行读操作时进行锁定。如果事务T对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据A上有了S锁,任何事务都只能再对其加S锁读取而不能加X锁修改。

    封锁协议

    • 一级封锁协议:是指事务T在修改数据A之前必须先对其加X锁,直到事务结束才释放X锁。解决了丢失修改的问题。

    • 二级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,读完后即可释放S锁。解决了读脏数据的问题。

    • 三级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,直到事务结束才释放S锁。解决了不可重复读的问题。

    两段锁协议(**)

    两段锁协议(2PL):是指同一事务对任何数据进行读写之前必须对该数据加锁;在释放一个封锁之后,该事务不再申请和获得任何其他封锁。(一个事物申请锁的时候,必须全部申请下来。释放锁的时候也必须全部释放。不能先申请一个锁释放一个锁,然后继续申请释放)

    两段’ 含义:事务分为两个阶段。第一阶段是获得封锁,也称为扩展阶段。第二阶段是释放封锁,也称为收缩阶段

    如果遵循两段锁协议,一定是可串行化的;

    不遵循两段锁协议,可能是可串行化的,也可能不是;

    采用两段锁协议也有可能产生死锁,这是因为每个事务都不能及时解除被封锁的数据,可能会导致多个事务都要求对方已经封锁的数据而不能继续运行。

    展开全文
  • 通过modbusTCP协议远程控制信捷PLC;可用于自动化生产线监控、控制;C/C++;
  • 数据库第四版答案(王珊萨师煊)第11章并发控制[参照].pdf
  • 数据库的并发控制技术分析.pdf
  • 数据库系统概论-并发控制

    千次阅读 2022-04-07 00:10:05
    数据库系统概论之并发控制相关基础概念
  • 数据库系统并发控制

    2022-04-12 20:55:57
    数据库系统并发控制 并发控制概述 多用户数据库系统:允许多个用户同时使用的数据库系统 事务并发执行带来的问题 会产生多个事务同时存取同一数据的情况 可能会存取和存储不正确的数据,破坏事务隔离性和数据库的...
  • 1. 为什么需要并发控制 2. 事务调度及可串行性 3. 基于封锁的并发控制方法 4. 基于时间戳的并发控制方法 5. 基于有效性确认的并发控制方法
  • 高效的并发控制策略可以提高系统的并行处理能力、改善交互响应时间。该文讨论了并发编程的复杂性,分析了4种基于线程的并发结构。目前,基于线程的并发控制技术已成功地应用到了分布事务监控器0nceTX中。
  • 一般情况下,在数据库基于某个数据进行基于封锁的并发访问控制技术时,读会阻塞写操作,写会阻塞读操作,写也会阻塞写操作,这导致了数据库事务处理的性能会比较差。 MVCC技术对数据进行“分身”处理,把数据按照...
  • 数据库的并发控制技术深度探索.pdf
  • 并发任务是指多个任务在某一时刻同时运行。在过去,一提到并发执行任务,首当其冲的解决方案就是在程序中创建多个线程来实现,但是线程本身较为底层,而且管理的难度比较大,如果想做...其中一种实现任务异步执行的技术
  • 数据库并发控制技术

    千次阅读 2018-08-25 14:27:19
    事务处理技术主要包括数据库恢复技术和并发控制技术。本篇博文主要总结下并发控制技术。 事务:是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,...
  • Concurrent Series:books:深入浅出并发编程实践:并发基础、并发控制、并发模型、并发 IO · · Introduction | 前言随着处理器技术的发展,单核时代以提升处理器频率来提高运行效率的方式遇到了瓶颈,目前各种主流...
  • 数据库并发控制.pdf

    2021-10-06 00:41:08
    数据库并发控制.pdf
  • 第9章数据库系统恢复和并发控制技术
  • 第7节 事务及并发控制技术.docx
  • 数据库并发控制详解

    千次阅读 2019-04-16 11:05:20
    1. 什么是并发控制? 数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对...
  • 基于SQL Server 2000的实用并发控制技术.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 311,075
精华内容 124,430
热门标签
关键字:

并发控制的主要技术有哪些