数据库总复习第十一章 并发控制

这篇具有很好参考价值的文章主要介绍了数据库总复习第十一章 并发控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第十一章 并发控制

11.1 并发控制概述

事务是并发控制的基本单位

并发操作带来的数据不一致性
R(x):读数据x
W(x):写数据x

丢失修改
T2的提交结果破坏了T1的提交结果,导致T1的修改被丢失
遵循两段锁协议的调度例题,数据库,数据库,java,服务器

不可重复读

  1. T1读取某一数据,T2对其做了修改,当事务T1再次读该数据,得到与前一次不同的值
  2. T1读取某些数据,T2删除其中部分数据,当T1再次读取数据,发现某些记录消失了
  3. T1读取某些数据,T2插入了一些数据,当T1再次读取数据,发现多了一些记录

遵循两段锁协议的调度例题,数据库,数据库,java,服务器

读脏数据

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

遵循两段锁协议的调度例题,数据库,数据库,java,服务器

11.1.1 调度概念

调度:“事务集”中的一串有序操作集,一个事务中操作在调度中的顺序应该于他们在事务中的顺序一致

每个事务最后的行动:COMMIT和ROLLBACK

并发控制的主要技术

  • 封锁
  • 时间戳
    • 事先选定事务的次序,按照这个时间戳来解决事务的冲突操作
  • 乐观控制法
    • 事务提交前再进行正确性检查

11.2 封锁

  • 排他锁(X锁)
    • 若T对数据对象A加上X锁,则只允许T读取和修改A,其他事务在T释放A上的锁之前都不能读取和修改A
  • 共享锁(S锁)
    • T能读取A不能修改A,其他事务只能对A上S锁而不能上X锁,直到T释放A上的S锁为止

11.3 封锁协议

  • 一级封锁协议
    • 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放
  • 二级封锁协议
    • 在一级封锁协议的基础上增加事务T在读取数据R之前必须对其加S锁,读完后即可释放S锁
  • 三级封锁协议
    • 在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放

11.4 活锁和死锁

避免活锁:采取先来先服务原则

产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待现象

解决死锁

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

死锁的诊断

  • 超时法
    • 实现简单,但有可能误判死锁,时限设置太长死锁发生后不能及时发现
  • 事务等待图
    • 图中存在回路则表示出现死锁
      遵循两段锁协议的调度例题,数据库,数据库,java,服务器

死锁的解除
选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续进行下去

11.5 并发调度的可串行性

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

可串行性是并发事务正确调度的准则

冲突操作:不同的事务对同一个数据的读写操作写写操作,其他不冲突

冲突可串行化调度:一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度

冲突可串行化一定是可串行化调度,可串行化不一定冲突可串行化

盲目写:在执行W(Q)之前没有执行R(Q)的操作,存在于任何不是冲突可串行化的视图可串行化调度中
视图可串行化:两个调度每个事务都读取相同数据从而进行相同的计算

遵循两段锁协议的调度例题,数据库,数据库,java,服务器

11.5.1 调度冲突可串行化的判定(例题)

遵循两段锁协议的调度例题,数据库,数据库,java,服务器

11.6 两段锁协议

第一阶段:获得封锁,也称为扩展阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁

第二阶段:释放封锁,也称为收缩阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁
遵循两段锁协议的调度例题,数据库,数据库,java,服务器

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

一次封锁发遵守两段锁协议

两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁

11.7 封锁的粒度

封锁对象的大小称为封锁粒度

封锁的对象:逻辑单元(属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库),物理单元(页、物理记录)

  • 封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小
  • 封锁的粒度越小,并发度较高,但系统的开销也就越大

11.7.1 多粒度树

  • 根结点是整个数据库,表示最大的数据粒度
  • 叶结点表示最小的数据粒度
    遵循两段锁协议的调度例题,数据库,数据库,java,服务器

多粒度封锁中一个数据对象可能以两种方式封锁:

  • 显式封锁
    • 直接加到数据对象上的封锁
  • 隐式封锁
    • 该数据对象没有独立加锁,是由于其上级节点加锁而使该数据对象加上了锁

对某个数据对象加锁,系统要检查

  • 该数据对象
    • 有无显式封锁与之冲突
  • 所有上级结点
    • 检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点已加的封锁造成的)
  • 所有下级结点
    • 看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突

11.7.2 意向锁

目的:提高对某个数据对象加锁时系统的检查效率

对任一结点加基本锁,需要对上层结点加意向锁

意向锁类型:

  • IS锁:意向共享锁
  • IX锁:意向排他锁
  • SIX锁:共享意向排他锁
    • 例如对某个表加SIX锁,则表示该事务要读整个表(S锁),同时会更新个别元组(IX锁)

遵循两段锁协议的调度例题,数据库,数据库,java,服务器

具有意向锁的多粒度封锁方法

  • 申请封锁时应该按自上而下的次序进行
  • 释放封锁时应该按自下而上的次序进行

例如:事务T1要对关系R1加S锁文章来源地址https://www.toymoban.com/news/detail-796408.html

  • 要首先对数据库加IS锁
  • 要检查数据库和R1是否已加了与S不相容的锁(X或IX或SIX)
  • 不再需要搜索和检查R1中的元组是否加了不相容的锁(X锁)

到了这里,关于数据库总复习第十一章 并发控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【数据库原理 • 七】数据库并发控制

    【数据库原理 • 七】数据库并发控制

    前言 数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。 当前互联网+与大数据,一切都建立

    2023年04月12日
    浏览(13)
  • 【数据库原理】(26)数据库并发控制

    并发控制是数据库管理系统(DBMS)的核心功能之一。它确保在多个用户并行访问数据库时,数据库的一致性和完整性得到维护。 事务是数据库中基本的逻辑工作单位,由一系列操作组成,这些操作要么全部执行(提交),要么完全不执行(回滚)。一个事务可以是单个SQL语

    2024年01月18日
    浏览(7)
  • 数据库系统-并发控制

    数据库系统-并发控制

    多端操作同一个数据库的问题 1.2.1 脏读 新增的是行 1.2.2 幻读 修改的是原有数据的记录 1.2.3 不可重复读 1.2.4 数据丢失问题 并发控制、事务、封锁 是DBMS实现并发控制的核心技术 DBMS提供的控制数据操作的一种手段,:应用程序员将一系列的数据库操作组合在一起为一个整体

    2024年02月01日
    浏览(8)
  • 数据库DBMS并发控制

    数据库DBMS并发控制

        串行调度 顾名思义 就是可以进行调度的意思  可串行调度 就是 一种和串行调度等价的并行调度 效果是一样但是速度很快。 postgresql事务隔离级别如何查看以及设置_postgresql查看事务隔离级别_abcwywht的博客-CSDN博客 mysql数据库事务隔离级别的查看、设置、以及隔离级别有

    2024年02月06日
    浏览(8)
  • 2023-08-28 数据库-并发控制-初步思考

    此前做查询优化和查询执行比较多, 一般是在一个单独的事务内考虑优化查询. 最近在做并发控制方面的事情, 一些此前考虑的较少的方面需要做更为深入的思考. 并发控制和事务的特性息息相关, 直白的说就是事务的隔离性, 但是这么理解过于肤浅, 本文做一些初步的思考. 一个

    2024年02月11日
    浏览(11)
  • 【LeetCode】《LeetCode 101》第十一章:妙用数据结构

    【LeetCode】《LeetCode 101》第十一章:妙用数据结构

    C++ 提供的数据结构包括: Sequence Containers:维持顺序的容器。 vector: 动态数组 ,用于 O(1) 的随机读取。因为大部分算法的时间复杂度都会大于 O(n) ,因此我们经常新建 vector 来存储各种数据或中间变量。 list: 双向链表 ,也可以当作 stack 和 queue 来使用。由于 LeetCode 的题目

    2024年02月13日
    浏览(8)
  • 【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

    【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年02月04日
    浏览(11)
  • java进行数据库操作的并发控制的2种方法

    本文分享自华为云社区《java进行数据库操作的并发控制》,作者:张俭。 在现代应用编码中,从数据库里面find出来,进行一些业务逻辑操作,最后再save回去。即: 但是这样的业务操作,如果一个线程修改年龄,另一个线程修改昵称,最后save回去,可能会导致年龄/昵称某一

    2024年02月04日
    浏览(11)
  • 深入解析MVCC:多版本并发控制的数据库之道

    目录 引言 一、什么是MVCC? 二、MVCC的实现原理 2.1版本号 2.1.1版本号的作用: 2.1.2版本号的组成: 2.1.3.示例 2.2事务id 2.2.1事务ID的作用: 2.2.2事务ID的生成: 2.2.3示例: 2.3 快照(Snapshot) 2.3.1快照的作用: 2.3.2快照的实现方式: 2.3.3示例: 2.4版本链(Version Chain) 2.4.1版本链

    2024年01月24日
    浏览(16)
  • 系统架构设计师---事务管理、并发控制、数据库的备份与恢复

    目录 事务管理       定义       事务的四个特性(ACID)     相关SQL语句 并发控制     并发操作     封锁  数据库的备份与恢复      备份(转储)与恢复        备份分类       数据库的四类故障          DBMS 运行的基本工作单位是事务,事务是用户定义的一个数据库

    2024年02月12日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包