并发控制的概念_并发控制概念

并发控制的概念_并发控制概念11章 并发数据 了解并发需要先了解的概念: 1.数据库是一个可以共享资源,可以多用户同时使用一个数据库,该数据库称为多用户数据库,如订票系统、银行系统 2.多事务执行方式: 1.事务串行执行 : 务

第十一章-并发控制

11章 并发数据

  • 了解并发需要先了解的概念:
    • 1.数据库是一个可以共享资源,可以多用户同时使用一个数据库,该数据库称为多用户数据库,如订票系统、银行系统
    • 2.多事务执行方式:
      • 1.事务串行执行 :
        务执行完在执行下一个事务 – 缺点资源浪费
        并发控制的概念_并发控制概念

        2.交叉并发方式 :
        在单处理机系统中,事务的并行事务是提供交叉运行,如T1事务去读数据A,读需要耗时,T2事务就开始运行,T1读完又去执行T1下面的操作,遇到T1等待又去执行T2,以此类推
        并发控制的概念_并发控制概念

        3.同时并发方式:– 了解,该书不详讲
        多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务自正的并发

10.1并发控制概念:

  • 事务是并发控制的基本单位,并发控制机制任务是:
    • 1.并发操作进行正确的调度(正确的调各并发的事务)
      2.保证事务的隔离性(保证事务在执行的过程中不能被其它的事务打扰)
      3.保证数据库的一致性(刚读A数据为1,马上A就变成2,这就不一致了)

  •  为什么需要并发控制:并发时又多个事务在执行,如果没有正确的调度,调度事务就会打架,产生数据混乱

  • 用记号R(x)标识读数据x,W(x)表示写数据x 

  • 案例1飞机卖票-并发操作带来的不一致性:

    • 售票窗口(T1事务)和售票窗口(T2事务),并发去访问数据库中的票数余额A=16,如果T1和T2都,
      卖出去一张票,都A-1=15,然后写回数据库,因为T1和T2都执行了A-1=15,所以明明是卖出去两张,实际卖出去了一张

  • 说明:

    • 1.案例1的情况称为数据库的不一致性,是由并发产生的
      2.T1和T2的存在顺序的调度是随机的
      3.并发操作带来的数据不一致性包括:丢失数据、不可重复度、读”脏”数据

  • 1.丢失数据:

    • T1和T2事务,读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1数据丢失,如售票案例

    • 并发控制的概念_并发控制概念

  •  2.不可重复读:

    • T1读取数据A=15,T2对A进行更改,T1在去读的时候就读不到上一次的结果

    • 不可重复读分三种情况,1.读取值不一致、2.数据消失、3.多出数据(2和3称为幻影现象):

      • 1.读取不一致:T1和T2读A=15,T2更改A,T1在去校对重读A,就与第一次读取的值不一致
        2.数据消失:T1按照条件查找到数据,T2删除了其中部分的数据,T1在按同样的数据去读取时,发现数据就消失了
        3.多出数据:T1按照条件查找到数据,T2插入了一些的数据,T1在按同样的数据去读取时,发现多了一些数据

    • 并发控制的概念_并发控制概念

  • 3.读“脏”数据:

    • 读“脏”数据表达读到不正确的数据     

    • T1读取数据A=15,并修改为99,T2读取数据A=99,当T1撤销修改操作,A改回15,那么T2读的就是“脏”数据,因为和数据库的数据不一致

    • 并发控制的概念_并发控制概念

  • 说明:

    • 1.以上的3类不一致主要原因就是并且操作破坏了事务的隔离性
      2.并发操作要正确的方式调度,使一个事务的执行不受其它事务的影响,避免造成数据的不一致(某些情况下可以数据不一致,这种情况是因为影响不大)
      3.并发的主要技术:封锁、时间戳、乐观控制法、多版本并发控制

11.2 封锁:

  • 1.什么是封锁:
    • 封锁是实现并发控制的一个非常重要技术
      • 封锁就是事务T1在等某个数据对象(如表、记录)操作之前,先向系统发生请求,对其加锁。加锁后T1对该
        数据对象就有了一定的控制,在事务T1释放锁之前,其它事务不能更新该数据对象

  • 2.基本的封锁类型:

    • 一个事务对数据对象加锁后拥有什么样的控制是由封锁的类型决定
      基本的封锁类型:排它锁(简称:x锁)、共享锁(简称:s锁)  

    • 2.1.排它锁:
      • 排它锁 — 又称写锁
      • 理解:当某个事务T1,给数据对象A加上x锁后,只有T1可以进行读取和修改,
        其它的事务就不能在对A加任何类型的锁,只到T1释放A上的锁,这样不就保证了,
        T1释放A上的锁时,不被其它事务所干扰

    • 2.2.共享锁:

      • 排它锁 — 又称读锁

      • 理解:当某个事务T1,给数据对象A加上s锁后,T1可以进行读取但不能进行修改,
        其它事务可以在对A加上s锁,但不能加x锁,直到T1释放了锁,这样就保证了,
        在其它事务都可以读A,都不能修改A,保证了数据一致

    • 2.3 锁的相容钜陈:

      • 并发控制的概念_并发控制概念

  • 3.细节:

    • 封锁 也可以叫 加锁

11.3 封锁协议:

  • 1.封锁协议的作用:解决三个不一致性(不可重复读、丢失修改、读”脏”数据)
  • 2.什么是封锁协议:封锁协议是指运用x锁和s锁对数据对象加锁时,约定一些规则,这些规则为封锁协议
    • 例如何申请x锁和s锁、持锁时间、何时释放等
  • 3.三级封锁协议(该数只讲三级协议):封锁方式规定不同的规则,形成不同的封锁协议,不同的协议在不同
    的程度上为并发操作的正确调度提供一定的保证。

    • 3.1.一级协议
      • 1.什么是一级封锁协议:一级封锁协议是指事务T1在修改数据R正确必须对其加X锁直到事务结束才释放;事务又分正常结束、非正常结束
      • 2.一级封锁协议作用:
        • 1.防止丢失数据,并保证事务T1可恢复(恢复:这里的恢复指可以重复读到数据)
          2.在一级封锁协议中,只是读数据是不用加锁的

      • 3.一级封锁协议存在问题:一级封锁协议可能会出现,不可重复读、和读”脏”数据

      • 4.解决丢失修改问题:

        • 并发控制的概念_并发控制概念

    • 3.2二级封锁协议:

      • 1.什么是二级封锁协议:二级封锁协议是一级封锁协议增强事务T1在读取数据R前必须对其加S锁,读完后即可释放S锁

      • 2.二级封锁协议作用:

        • 1.防止丢失数据,和读“脏”数据

      • 3.二级封锁协议存在问题:由于读完数据后即可释放S锁,所以会存在,不可重复读

      • 4.解决读“脏”数据问题:

        • 并发控制的概念_并发控制概念

    • 3.3三级封锁协议:

      • 1.什么是三级封锁协议:三级封锁协议是一级封锁协议增强事务T1在读取数据R前必须对其加S锁,直到事务的结束

      • 2.三级封锁协议作用:

        • 1.防止丢失数据、读“脏”数据和不可重复读

        • 3.解决不可重复读问题:

          • 并发控制的概念_并发控制概念

  • 4.课本总结:

    • 1.三级协议的主要区别是,什么操作需要申请封锁协议以及何时释放锁
      1.1.写的操作必须是-x锁,释放时间-直到事务结束
      1.2.读的操作的释放时间-1.读完就释放-2.直到事务的结束
      2.不同的封锁协议使事务达到的一致性级别不同,封锁协议越高,一致性程度越高

    • 并发控制的概念_并发控制概念

  • 5.个人总结:

    • 1.一级封锁协议:事务加x锁,释放时间-事务结束,防止丢失修改,有不可重复的和读“脏”数据问题
      2.二级封锁协议:事务加s锁,释放时间-读完就释放,防止丢失修改,读“脏”数据,有不可重复的和问题
      3.三级封锁协议:事务加s锁,释放时间-事务结束,防止丢失修改,读“脏”数据,不可重复

 

11.4 活锁和死锁:

 

11.4.1 活锁:

  • 1.什么是活锁:一个事务长时间的去等待操作(或获取)一个数据对象,都没有等到
    • 例子:事务T1封锁封锁了数据R,T2请求封锁R,T3请求封锁R,T1释放了R,但得到请求封锁的是T3,
      如果T4又请求封锁R,T3释放,T4得到请求封锁,T2又没得到请求封锁,这就是活锁 – 可看图理解

  • 1.1.怎么避免活锁:

    • 1.先来先服务(就是多个事务请求同一个数据对象,谁先来就执行谁)

    • 2.按优先级(每一个按优先级来执行,如有紧急的事务,可以提高该事务的优先级来先执行)
      并发控制的概念_并发控制概念

  • 2.什么是死锁:怎么都请求不到数据对象

    • 例子:事务T1对R1封锁,事务T2对R2封锁,现在事务T1要对R2请求封锁,因为T2在封锁中,请求不了,
      T2有要对R1请求封锁,T1和T2请的请求不了,就就是死锁 – 可看图理解

  • 2.1.产生死锁的原因:两个或多个事务,都一级封锁了一些数据对象,然后又请求被其它事务封锁的数据对象加锁,从而死锁

  • 2.1.2.解决死锁的方法:预防死锁-和诊断与解除死锁

    • 2.1.3预防死锁:预防死锁分为,1.一次封锁法、2.顺序封锁法

    • 预防死锁就是压迫破坏产生死锁的条件

      • 2.1.4.一次封锁法:

        • 1.什么是一次封锁法:每个事务必须一次将所有的数据全部加锁,否则就不能执行

        • 2.存在问题:

          • 1.降到系统并发度(你的封锁完了,其它事务怎么用)

          • 2.难于事先精确确定封锁对象(我怎么最知道我要确定要用哪些数据对象)

      • 2.1.5.顺序封锁法:

        • 1.什么是顺序封锁法:预先对数据对象排序(数据库管理系统做的活 – 排序),所有事务都按这个事务进行封锁

          • 排序?什么意思:给每个事务排序,只有封锁了1,才能去封锁2,以此内推

        • 2.存在问题:

          • 1.维护成本高(进行了增删改操作,就又要重新排序)

          • 2.难以实现(事务的封锁,是随着事务的执行而动态决定的,很难确定要封锁哪个对象)

        • 2.1.5.预防死锁总结:

          • 1.预防死锁不适合数据库

          • 2.数据库在解决死锁的问题上普遍才用诊断与解除死锁

      • 并发控制的概念_并发控制概念
    • 2.2.诊断与解除死锁:死诊断分为:1.超时法、2.等待图法
      • 2.2.1.超时法:

        • 1.什么是超时法:事务等待时间超过规定的时限,就认为发生了死锁

        • 2.优缺点:

          • 优点:实现简单

          • 缺点:1.可能误判,如事务因为其它原因导致超时,2.时限限制过长,死锁发生后不能及时发现

      • 2.2.2.等待图法:

        • 1.什么是等待图法:事务等待图是一个有向图G=(T,U)、其中:

          • T为结点集合(每个结点表示运行的事务),

          • U为边的集合(每条边表示事务等待情况)

        • 例:T1等待T2,则T1,T2之间划一条有向边,从T1指向T2

        • 2.等待图法说明:

          • 1.数据库管理系统的并发控制子系统按周期性(如每隔多少秒),生成事务等待图,检测事务,如果存在回路,则表示系统中出现死锁

          • 2.解除死锁的方法是限制一个处理死锁代价最小的事务,将其撤销,释放该事务的所有锁,使其它事务能继续运行下去

        • 并发控制的概念_并发控制概念

           

           

            

     

    

  

 

 

 

 

  

    

 

              

       

  

 

      

        

 

    

  

        

 

 

    

    

   

    

    

     

 

原文地址:https://www.cnblogs.com/Mr-shne/archive/2022/12/05/16934631.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4455.html

(0)
上一篇 2023-06-18
下一篇 2023-06-19

相关推荐

  • 初识Redis_redis入门指南

    初识Redis_redis入门指南初识Redis NoSQL是什么? 数据库: 用来存储数据的仓库 NoSQL: 不仅仅是SQL,是许多非关系型数据库的统称,但本质上还是存储数据的仓库 为什么需要NoSQL? 1. 解决了高并发的读写

    2023-02-09
    156
  • Python开发人员必知:如何操作索引列表

    Python开发人员必知:如何操作索引列表列表是Python中最常用的数据结构之一,可能是因为我们在编程过程中必须经常处理列表数据,比如操作列表的索引。在这篇文章中,我们将学习如何操作索引列表。

    2024-03-13
    77
  • Python中break的使用方法

    Python中break的使用方法在Python中,break是一种控制流语句,用于中断循环语句的执行。当程序执行到break语句时,循环语句会立即停止执行,程序开始执行循环语句后的第一条语句。通过使用break,我们可以在满足一定条件的情况下,中断循环,提高程序执行的效率。

    2024-03-01
    97
  • 用Python实现高效数据抓取

    用Python实现高效数据抓取随着互联网的发展,数据已经成为了一个重要的资源,而数据抓取也成为了一项重要的技能。由于Python具有简单易学、性能良好、支持各种操作系统、第三方类库丰富等诸多优势,它已经成为了数据科学领域非常流行的编程语言之一。本文将介绍如何用Python实现高效数据抓取。

    2024-05-22
    72
  • MySQL 连接时尽量使用 127.0.0.1 而不是 localhost[通俗易懂]

    MySQL 连接时尽量使用 127.0.0.1 而不是 localhost[通俗易懂]原因 Whenever you specify “localhost” or “localhost:port” as server, the MySQL client library will ov…

    2022-12-23
    140
  • mysql默认的事务隔离级别能达到什么效果_MySQL事务隔离级别

    mysql默认的事务隔离级别能达到什么效果_MySQL事务隔离级别经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下。 MySQL 事务 本文所说的 MySQL 事务都是指在 I

    2023-02-10
    150
  • Python CGI示例:从网页中获取用户输入并生成响应

    Python CGI示例:从网页中获取用户输入并生成响应CGI是一种通用网关接口,是一种标准,允许Web服务器运行可执行文件(称为CGI脚本)来生成动态Web内容。它提供了一种可编程的方式来与Web服务器进行通信,使得Web应用程序可以处理用户输入并生成相应的响应。

    2024-03-02
    75
  • 用Pycharm查看Python版本

    用Pycharm查看Python版本 Python是非常流行的一种编程语言,无论是初学者还是高级开发者,都需要了解自己使用的Python版本。Pycharm作为一款常用的Python集成开发环境,提供了方便快捷的方式来查看Python版本,本文将会全面详细地介绍如何使用Pycharm查看Python版本。

    2024-08-04
    31

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注