【CMU15-445 Part-17】Two-Phase Locking

news2024/11/19 13:33:59

Part17-Two-Phase Locking

Untitled

Lock Types

S-LOCK 共享锁 for reads

X-LOCK 排他锁 for writes

Untitled

上述T1最后R(A) 会导致不可重复读

2PL

允许数据库系统始终以保证Conflict Serializable schedule情况下分发lock

Phase #1 Growing

  • 每个txn请求locks 从lock manager
  • lock manager grants 或者 denies lock request

Phase #2 Shrinking

  • txn只允许进行释放锁,释放先前获得锁,该阶段不可以获得新锁或者升级锁

Cascading abort

级联中止,T2 read T1写入的值,T1回滚,T2也得跟着回滚。

有一些潜在可以串行化的调度不被2PL允许,有些保守了

Untitled

可能遇到脏读:Strong Strict 2PL 强严格两阶段锁 SS2PL

可能导致死锁:Detection or Prevention

SS2PL

执行完该事务,提交该事务的时候才回去释放锁。

strict 一般是☞ 提交事务的时候事务所做的修改才会被该系统中其他执行的事务所看到。这样的好处有:不会引起级联中止;中止的事务只需要重新恢复修改的tuples原来的值就行。

Untitled

DeadLock Detection + Prevetion

对于Detection,DBMS创建一个waits-for 图来跟踪每个事务等待获取的锁,每个节点是一个事务,Ti→Tj说明Ti等待Tj释放一个锁。如果出现死锁,只需要选择一个victim,然后kill him,rollback即可。可能只需要回滚部分查询来释放锁,解除死锁。

DeadLock Handling: Victim Selection

  • by age 选择时间戳最小的事务
  • by progress,执行了最多或者最少查询
  • by the # of items already locked 看锁的数量
  • by the # of txns that we have to rollback with it
  • 考虑某个事务被重启的次数,防止饿死

DeadLock Handling: Rollback Length

回滚多深? completely 或者minimally

Mysql PG可以设置隔离级别+deadlock timeout。PG可以对每个事务单独设置隔离级别。In PG,进入死锁状态之后可以查询catalog显示事务持有那些锁,等待哪些锁,这些锁属于哪个事务进程等信息。

DeadLock Prevention

如果一个事务去拿一个别的事务已经占有的lock,DBMS会kill 这其中一个事务来避免死锁,不需要waits-for graph或者死锁探查的其他算法。

  • Wait-Die:Old waits for Young,如果请求txn比holding txn有更高的优先级,那么req txn 等待holding txn 释放锁。反之,直接abort。
  • Wound-Wait,young waits for old,如果req txn 优先级大于 holding txn,那么直接抢占式,如果优先级小的话那么请求txn等待。

下面场景:T1 优先级高于 T2,T1 早于T2,第一张图是T2先拿到lock,wait-die T1 wait, wound wait T2 kill and restart。第二张图是T1 grab lock, wait-die T2 die, wound-wait,T2 wait(无法抢占)

Untitled

wait-die 基本是按照时间戳顺序来发放lock,如果能够保证一种类型的所按照一个方向发放,可能会很好的避免死锁。

当txn重启,是原本的时间戳,因为饿死,新的时间戳可能会导致饿死,但是按照顺序,老的时间戳早晚会被执行。

Hierarchical Locking

层级锁,或者使用不同粒度的lock来,tuple、table、page。

Untitled

如何是用最少的lock来高效地完成任务?

针对不同的事务使用不同粒度和不同类型的锁

排他锁和共享锁 for leafs of lock tree, intention locks for higher level来提示其他事务你在下面干嘛。Intention Lock允许以共享或排他模式锁定更高级别的节点,而无需检查所有的子节点。如果节点处于Intention 模式,则在树的较低层某个节点上就有该类型的lock。

对应三种lock,Intention-Shared IS,以该节点为根节点的子树下方某处会有一个sharedlock;Intention-Exclusive IX;Shared+Intention-Exclusive SIX,这个节点下面都有S锁,并某个地方有排他锁,是用于读取整个表并且可能会对某个地方进行更新的场景。

  • Locking Protocol

    如果想在某个节点有IS\S,至少父节点有IS

    要有X IX SIX 父节点要有IX

    Untitled

分层锁在实践中很有用,因为每个txn只需要几个锁。

意图锁有助于提高并发性:

→意图共享(IS):意图以更细的粒度获得S锁。
→Intention-Exclusive (IX):意图以更细的粒度获得X锁。
→共享+意图排他(SIX):同时想要S和IX。

Lock Escalation

锁升级,当获得太多低级锁时,锁升级会动态地请求粗粒度锁。这减少了锁管理器必须处理的请求数量

Lock in Practice

显示设置锁不是SQL的一部分,但是可以hint暗示要用哪种锁。

Untitled

还有就是为了更新的查询的暗示,我后面会写所以你先帮我拿个排他锁。

Untitled

Isolation Levels

隔离级别指的是一个事务修改过的对象的值对其他并发事务的可见程度。

可以在十五开始之前就提前设置事务的隔离级别

SET TRANSCATIONISOLATION LEVEL <isolation-level>;

ReadUncommitted读未提交

未提交的事务所做的修改对其他事务可见。

脏读:可能有;不可重复读:可能有;幻读:可能有。

ReadCommited读已提交

只有已提交的事务所做的修改才对其他事务可见。

脏读:无;不可重复读:可能有;幻读:可能有。

RepeatableRead可重复读

如果一个事务不修改对象X的值,则该事务在任何时候读到的X值都等于事务启动时读到的X值。

脏读:无;不可重复读:无;幻读:可能有。

Serializable可串行化

脏读:无;不可重复读:无;幻读:无。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1066011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

万界星空科技云MES系统生产全流程追溯功能介绍

制造业工厂产品质量贯穿于产品的整个生命周期&#xff0c;也是企业参与市场竞争求生存求发展的基础&#xff0c;而制造过程中出现的产品质量问题则是产品最终质量的基石。 随着全球市场竞争的进一步加剧和制造业信息化进程的加快&#xff0c;企业对产品制造过程的质量信息管理…

1876. 长度为三且各字符不同的子字符串

1876. 长度为三且各字符不同的子字符串 C代码&#xff1a;滑动窗口 // 存在三种字符&#xff0c;且不重复、子串数量 int countGoodSubstrings(char * s){int k 3;int hash[26] {0};int len 0;int l 0;int ans 0;for (int i 0; i < strlen(s); i) {hash[s[i] - a];if…

c#设计模式-行为型模式 之 策略模式

&#x1f680;简介 &#x1f424;作为一个开发人员&#xff0c;开发需要选择一款开发工具&#xff0c;如在编写C#时&#xff0c;我们可以选择VisualStudio进行开发&#xff0c;也可以使用Rider 进行开发。 &#x1f433;该模式定义了一系列算法&#xff0c;并将每个算法封装起来…

最新天津python培训机构 Python培训的重要性

Python编程语言近年来备受瞩目&#xff0c;其简洁、易学、多用途的特点受到了众多程序员的喜爱。随着Python的普及程度不断提高&#xff0c;越来越多的人开始关注和学习Python。 Python培训的重要性 Python作为一门编程语言&#xff0c;具有广泛的应用领域&#xff0c;如数据…

linux5.10的一个警告Kernel image misaligned at boot, please fix your bootloader!

平台&#xff1a;rk3399linux5.10 问题&#xff1a;发现启动时有一个内核警告信息 Kernel image misaligned at boot, please fix your bootloader! 后面的数字是我打印的地址信息。 不知道这个内核搞一个这样的警告是什么原因&#xff0c;我就没有继续深挖啦。 一、通过搜…

解决若依框架多次list查询时,分页失效问题

一、问题背景 当若依框架遇到两次及以上的list查询时,会引发分页查询失效问题,如下图: 二、分析原因 分页查询原理 Mybatis的分页原理&#xff0c;大致就是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL&#xff0c;实现分页…

生命不息,分享不止,5款小巧的免费软件

​ 今天继续分享5个超实用的小工具&#xff0c;都是非常小巧精致的免费软件。 1.3D渲染和动画——Luxion KeyShot ​ Luxion KeyShot是一款专业的3D渲染和动画软件&#xff0c;它可以快速地创建逼真的视觉效果。KeyShot支持多种3D格式&#xff0c;可以导入任何模型&#xff0…

【版本控制工具一】Git 安装注册及使用

文章目录 一、Git 、Github、Gitee1.1 概述1.2 码云 相对于 github 的优势 二、Github 或 Gitee注册2.1 注册2.2 创建仓库 三、Git下载与安装四、创建本地仓库 一、Git 、Github、Gitee 1.1 概述 Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或…

大数据软件项目开发流程

大数据软件项目的开发流程通常包括多个阶段&#xff0c;从项目规划和需求分析到开发、测试、部署和维护。以下是一般的大数据软件项目开发流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.项目规…

富瑞创新加杠杆平台可靠吗?如何正确评价?

关于富瑞创新加杠杆平台的可靠性&#xff0c;我们需要从多个方面进行评价和分析&#xff0c;包括公司背景、平台服务、风控措施、投资收益等。 首先&#xff0c;富瑞创新加杠杆平台是由富瑞创新投资控股有限公司运营&#xff0c;公司成立于2006年&#xff0c;是一家经过中国证…

8.绘制旗帜(TRIANGLE_FAN)

愿你出走半生,归来仍是少年 通过TRIANGLE_FAN和四个点绘制出旗帜。 1.知识点 1.1.TRIANGLE_FAN 一系列三角形组成的类似于扇形的图形。第二个三角形是由上一个三角形最后一条表和当前点组成。 2.代码 <script setup lang"ts">import { onMounted, …

【C++】指针与引用(学习笔记)

一、左值与右值 左值&#xff1a;编译器为其单独分配了一块存储空间&#xff0c;可以取其地址的&#xff0c;可以放在赋值运算符左边 右值&#xff1a;数据本身。不能取到其自身地址&#xff0c;只能赋值运算右边 左值最常见的情况如西数和数据成员的名字 右值是没有标识符、…

如何轻松使用 ChatGPT 进行论文大纲和创作

ChatGPT能够编写复杂的代码、博客文章等&#xff0c;它可以帮助我们做很多事情。今天本篇文章分享的主要内容如何利用 ChatGPT 来撰写论文文章。下面会介绍如何轻松使用 ChatGPT 进行论文大纲和创作&#xff01; 1、使用 ChatGPT 确定主题 文章非常重要的一个部分就是主题。如…

Bark Ai 文本转语音 模型缓存位置修改

默认缓存位置在&#xff1a;~/.cache 加入环境变量&#xff1a;XDG_CACHE_HOME&#xff0c;指定缓存位置 修改后新的位置为&#xff1a; D:\Ai\Bark\Bark Cache

如何使用 API 接口获取商品数据,从申请 API 接口、使用 API 接口到实际应用

在当今的数字化时代&#xff0c;应用程序接口&#xff08;API&#xff09;已经成为数据获取的重要通道。API 接口使得不同的应用程序能够方便地进行数据交换&#xff0c;从而促进了信息的广泛传播和利用。在众多的数据源中&#xff0c;商品数据是一个非常重要的领域&#xff0c…

大数据软件项目的验收流程

大数据软件项目的验收流程是确保项目交付符合预期需求和质量标准的关键步骤。以下是一般的大数据软件项目验收流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.项目验收计划制定&#xff1a; 在…

水库安全监测方案(实时数据采集、高速数据传输)

​ 一、引言 水库的安全监测对于防止水灾和保障人民生命财产安全至关重要。为了提高水库安全监测的效率和准确性&#xff0c;本文将介绍一种使用星创易联DTU200和SG800 5g工业路由器部署的水库安全监测方案。 二、方案概述 本方案主要通过使用星创易联DTU200和SG800 5g工业路…

mac m1打开word或excel显示VB运行时错误53,怎么解决这个问题,亲测有效!

mac m1打开word或excel或ppt时显示VB运行时错误53,每次都要点击多次,才能结束,用起来非常不方便,很麻烦,那么怎么解决这个问题呢,为大家献上,亲测有效! 如上图 非常简单 选择工具 找到模板加载项 如下图 点进去哈 接下来进入到以下画面

5.绘制多点

愿你出走半生,归来仍是少年&#xff01; 前面几个案例通过TS传入点参数实现绘制&#xff0c;但是每次的绘制都是单独绘制一个点&#xff0c;未实现一次绘制多个点的效果。该案例通过GL的Buffer实现一次绘制多点。 1.知识点 1.1.缓冲区绘制流程 通过缓冲区对象处理数据时&…