分布式环境下的并发控制与封锁
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• • • • • 数据库记录中的一个字段值 一条数据库记录 一个磁盘块(页面) 一个完整的文件 整个数据库
基 本 思 想 和 概 念
2 基于封锁的并发控制方法概述
粒度对并发控制的影响 大多数DBMS缺省设置为记录锁或页面锁 粒度小,并发度高,锁开销大
• 数据项比较多,锁也多,解锁和封锁操作多,锁表存储空 间大(如存储读写时间戳)
• 封锁法分类
• 集中式封锁方法
• 一个站点被指定为主站点,存放对整个数据库的封锁表,并且负 责对全系统事务进行封锁
• 主副本封锁法:主副本所在站点封锁 • 分布式封锁法:网络中的站点共享锁的管理
2 基于封锁的并发控制方法概述
基本思想 事务访问数据项之前要对该数据项封锁,如果已经 被其他事务锁定,就要等待,直到那个事务释放该 锁为止 锁的粒度是锁定数据项的范围 一个数据项可以是下列的任何一种:
2
分 布 式 数 据 库 基 本 封 锁 算 法
基于封锁的并发控制方法概述
3. 主副本封锁法
不指定主站点,指定数据项的主副本
事务对某个数据项进行操作时,先对其主副本进行 封锁,再进行操作
主副本封锁,意味着所有的副本都被封锁
主副本按使用情况,尽量就近分布 可减少站点的负荷,使得各站点比较均衡
(c)使用锁的一个不可串行化调度的结果
2 基于封锁的并发控制方法概述
分 布 式 数 据 库 基 本 封 锁 算 法
1. 简单的分布式封锁方法
类似集中式,将同一数据的全部副本封锁,然后更新,之后解 除全部封锁 缺点是各站点间进行相当大的数据传输,如果有N个站点,就有 • • • • • N个请求封锁的消息 N个封锁授权的消息 N个更新数据的消息 N个更新执行了的消息 N个解除封锁的消息
read_lock(X); read_item(X); unlock(X); write_lock(Y) ; read_item(Y); Y := Y + X; write_item(Y) ; unlock(Y);
这个调度S的 结果: X=50,Y=50 (不可串行化)
(b)T1和T2可能的串行调度的结果
基 本 思 想 和 概 念
2
基于封锁的并发控制方法概述
锁的类型:
基 本 思 想 和 概 念
共享锁:Share锁,S锁或者读锁
排它锁:eXclusive锁,X锁,拒绝锁或写锁。
更新锁:Update锁,U锁
锁的选择:
数据项既可以读也可以写.则要用X锁 如果数据项只可以读.则要用 S锁.
2 基于封锁的并发控制方法概述
封锁准则:
封 锁 准 则 和 锁 的 转 换 事务T在执行任何read_item(x)操作之前,必须先执
行read_lock(x)或者write_lock(x)操作
事务T在执行任何write_item(x)操作之前,必须先 执行write_lock(x)操作
read_item(X); read_item(Y);
X:= X+Y;
Y := Y + X;
write_lock(X) ; read_item(X); X:= X+Y; write_item(X) ; unlock(X);
write_item(X) write_item(Y) ; ; (a)两个事务T1和T2 unlock(X); unlock(Y); 初始值:X=20,Y=30 串行调度T1,T2的结果: X=50,Y=80 串行调度T2,T1的结果: X=70,Y=50
注:其中FIND表示从数据库中读值,UPDATE表示把值写回到数据库 T1T2,结果140,T2T1,结果170, 得到结果是200,显然是不对的,T1在t7丢失更新操作。
1 .1并发控制的概念
并 发 控 制 问 题 之 二: 不 一 致 分 析
时间 t0 t1 t2 t3 x:=x-30 FIND x FIND x 更新事务T1 数据库中A的值 100 更新事务T2
Time t1 t2 t3 t4
1 .1并发控制的概念
并 发 控 制 问 题 之 一: 丢 失 更 新
时间
t0 t1 t2 t3 t4 t5 t6 t7 UPDATE x 70 200 UPDATE x x:=x-30 x:=x*2 FIND x FIND x
更新事务T1
数据库中X的值
100
更新事务T2
操作之后,必须执行unlock(x)操作
如果事务T已经持有数据项x上的一个读锁或者一个写 锁,那么它不能再执行read_lock(x)操作
•
•
如果事务T已经持有数据项x上的一个读锁或者一个写
锁,那么它不能再执行write_lock(x)操作 如果事务T没有持有数据项x上的一个读锁或者一个写 锁,那么它不能执行unlock(x)操作
2 基于封锁的并发控制方法概述
分 布 式 数 据 库 基 本 封 锁 算 法
2. 主站点封锁法
定义一个站点为主站点,负责系统全部封锁管理
所有站点都向主站点提出封锁和解锁请求,由它去 处理 缺点有:
• • 所有封锁请求都送往单个站点,容易由于超负荷造成“瓶颈
”
主站点故障会使系统瘫痪,封锁消息都在这里,制约了系统 可用性和可靠性
分布式环境下的并发控制与封锁
姓名: 专业: 学号:
主 要 内 容
1 并发控制概念
2 基于封锁的并发控制方法概述
1 .1并发控制的概念
通常,数据库总有若干个事务在运行,这些事务可能 并发地存取相同的数据,称为事务的并发操作。 当数据库中有多个事务并发执行时,系统必须对并发 事务之间的相互作用加以控制,这是通过并发控制机 制来实现的。 并发控制就是负责正确协调并发事务的执行,保证这 种并发的存取操作不至于破坏数据库的完整性和一致 性,确保并发执行的多个事务能够正确地运行并获得 正确的结果。 分布式数据库中的并发控制解决多个分布式事务对数 据并发执行的正确性,保证数据库的完整性和一致性 。比集中式并发控制更复杂。
可减少传输量
2 基于封锁的并发控制方法概 述
分 布 式 数 据 库 基 本 封 锁 算 法
4. 快照方法
快照方法类似于视图的一种导出关系,但又与视图不
同。它是实际数据的暂时凝聚,是数据库的一种存储方 式。 快照方法不考虑数据的复制,只考虑每一数据的“主 副本”和定义在这些“主副本”上的任意多个快照。快 照可以定义为一个或多个“主副本”的部分拷贝,也可 以定义为某个或某些“主副本”的全拷贝。
t4 t5
UPDATHale Waihona Puke Baidu x 70
注:在时间t5事务T2仍认为x的值是100
1 .1并发控制的概念
并 发 控 制 问 题 之 三: 读 脏 数 据
时间 t0 更新事务T1 数据库中A的值 100 更新事务T2
t1
t2 t3 t4 t5 t6
FIND x
x:=x-10 UPDATE x 90(脏数据) ROLLBACK 100 FIND x
2 基于封锁的并发控制方法概述
锁的转换
封 锁 准 则 和 锁 的 转 换
1. 特定条件下,一个已经在数据项x上持有锁的事务T
,允许将某种封锁状态转换为另外一种封锁状态 2. 比如,一个事务先执行了read_lock(x)操作,然后 他可以通过执行write_lock(x)操作来升级该锁 3. 同样,一个事务先执行了write_lock(x) 操作,然后 他可以通过执行read_lock(x) 操作来降级该锁
1 .1 并发控制的概念
集 中 式 DB 环 境
T1
T2
„
Tn
DB (一致性 约束)
1 .1并发控制的概念
分 布 式 DB 环 境 X
T1
T2
Y
Z
1 .1并发控制的概念
多处理器
并 发 执 行
CPU1 CPU2
T1 T2
Time
1 .1并发控制的概念
单处理器
T1
T2
T1
T2
非 并 发 执 行
CPU
并发控制算法
悲观法
乐观法
加锁法
时标排序法
混合法
加锁法
时序排序法
集中式加锁
基本时标排序
主副本加锁
多版本时标排序
并发控制算法分类
分布式加锁 保守时标排序
1 .2 并发控制机制的常用方法及其分 类 • 封锁法
• 事务的同步化是通过对数据库的片断或者数据项进行物理或逻 辑封锁来实现的 • 封锁对象的大小通常称为封锁粒度 • 封锁方法的类型可以根据在哪里进行封锁来进一步细分
如果事务T执行read_lock(x)操作,数据项x必须没有加
锁或者已经加了读锁,否则事务T的这个操作不能进行 如果事务T执行write_lock(x)操作,数据项x必须没有 加锁,否则事务T的这个操作不能进行
2 基于封锁的并发控制方法概述
封锁准则:
封 锁 准 则 和 锁 的 转 换 • • 事务T在完成所有read_item(x)和write_item(x)
基 本 思 想 和 概 念
粒度大,并发度低,锁开销小
• 如果是磁盘块,封锁磁盘块中的一条记录B的事务T必须封 锁整个磁盘块 • 而另外一个事务S如果要封锁记录C,而C也在磁盘块中,由 于磁盘块正在封锁中,S只能等待 • 如果是封锁粒度是一条记录的话,就不用等待了
2 基于封锁的并发控制方法概述
如何来确定粒度 取决于参与事务的类型 如果参与事务都访问少量的记录,那么选择 一个记录作为粒度较好 如果参与事务都访问同一文件中大量的记录 ,则最好采用块或者文件作为粒度
2 基于封锁的并发控制方法概述
锁的操作 基 本 思 想 和 概 念
Read_lock(x):读锁 Write_lock(x):写锁 unlock(x):解锁
数据项的状态
read_locked: 读锁 Write_locked:写锁
具体操作方法
在系统锁表中记录关于锁的信息 锁表中每条记录有四个字段:<数据项名称,锁状态,读锁的 数目,正在封锁该数据项的事务> 锁状态是上面两种,没有被封锁的数据项,在系统表中没有 记录
谢谢!
注: 事务T2依赖于事务T1的未完成更新
1 .2并发控制机制的常用方法及其分 类
• 保证只产生可串行化调度的机制 • 并发控制机制分类
• 按分配模式(数据方式) • 完全复制的DB • 部分复制DB或分片的DB • 按网络类型(通信方式) • 广播能力的 • 星型网, 环形网 • 同步化原则 • 建立在相互排斥地访问共享数据基础上的算法 • 通过一些准则(协议)对事务进行排序的算法 • 悲观并发控制法(事务是相互冲突的),乐观并发控制法(没有 太多的事务相互冲突)
T1
read_lock(Y);
T2
read_lock(X);
T1
read_lock(Y); read_item(Y); unlock(Y);
T2
满足封锁规则不 能保证产生串行 化调度
read_item(Y); read_item(X); unlock(Y); write_lock(X) ; unlock(X); write_lock(Y) ;
基 本 思 想 和 概 念
2 基于封锁的并发控制方法概述
粒度对并发控制的影响 大多数DBMS缺省设置为记录锁或页面锁 粒度小,并发度高,锁开销大
• 数据项比较多,锁也多,解锁和封锁操作多,锁表存储空 间大(如存储读写时间戳)
• 封锁法分类
• 集中式封锁方法
• 一个站点被指定为主站点,存放对整个数据库的封锁表,并且负 责对全系统事务进行封锁
• 主副本封锁法:主副本所在站点封锁 • 分布式封锁法:网络中的站点共享锁的管理
2 基于封锁的并发控制方法概述
基本思想 事务访问数据项之前要对该数据项封锁,如果已经 被其他事务锁定,就要等待,直到那个事务释放该 锁为止 锁的粒度是锁定数据项的范围 一个数据项可以是下列的任何一种:
2
分 布 式 数 据 库 基 本 封 锁 算 法
基于封锁的并发控制方法概述
3. 主副本封锁法
不指定主站点,指定数据项的主副本
事务对某个数据项进行操作时,先对其主副本进行 封锁,再进行操作
主副本封锁,意味着所有的副本都被封锁
主副本按使用情况,尽量就近分布 可减少站点的负荷,使得各站点比较均衡
(c)使用锁的一个不可串行化调度的结果
2 基于封锁的并发控制方法概述
分 布 式 数 据 库 基 本 封 锁 算 法
1. 简单的分布式封锁方法
类似集中式,将同一数据的全部副本封锁,然后更新,之后解 除全部封锁 缺点是各站点间进行相当大的数据传输,如果有N个站点,就有 • • • • • N个请求封锁的消息 N个封锁授权的消息 N个更新数据的消息 N个更新执行了的消息 N个解除封锁的消息
read_lock(X); read_item(X); unlock(X); write_lock(Y) ; read_item(Y); Y := Y + X; write_item(Y) ; unlock(Y);
这个调度S的 结果: X=50,Y=50 (不可串行化)
(b)T1和T2可能的串行调度的结果
基 本 思 想 和 概 念
2
基于封锁的并发控制方法概述
锁的类型:
基 本 思 想 和 概 念
共享锁:Share锁,S锁或者读锁
排它锁:eXclusive锁,X锁,拒绝锁或写锁。
更新锁:Update锁,U锁
锁的选择:
数据项既可以读也可以写.则要用X锁 如果数据项只可以读.则要用 S锁.
2 基于封锁的并发控制方法概述
封锁准则:
封 锁 准 则 和 锁 的 转 换 事务T在执行任何read_item(x)操作之前,必须先执
行read_lock(x)或者write_lock(x)操作
事务T在执行任何write_item(x)操作之前,必须先 执行write_lock(x)操作
read_item(X); read_item(Y);
X:= X+Y;
Y := Y + X;
write_lock(X) ; read_item(X); X:= X+Y; write_item(X) ; unlock(X);
write_item(X) write_item(Y) ; ; (a)两个事务T1和T2 unlock(X); unlock(Y); 初始值:X=20,Y=30 串行调度T1,T2的结果: X=50,Y=80 串行调度T2,T1的结果: X=70,Y=50
注:其中FIND表示从数据库中读值,UPDATE表示把值写回到数据库 T1T2,结果140,T2T1,结果170, 得到结果是200,显然是不对的,T1在t7丢失更新操作。
1 .1并发控制的概念
并 发 控 制 问 题 之 二: 不 一 致 分 析
时间 t0 t1 t2 t3 x:=x-30 FIND x FIND x 更新事务T1 数据库中A的值 100 更新事务T2
Time t1 t2 t3 t4
1 .1并发控制的概念
并 发 控 制 问 题 之 一: 丢 失 更 新
时间
t0 t1 t2 t3 t4 t5 t6 t7 UPDATE x 70 200 UPDATE x x:=x-30 x:=x*2 FIND x FIND x
更新事务T1
数据库中X的值
100
更新事务T2
操作之后,必须执行unlock(x)操作
如果事务T已经持有数据项x上的一个读锁或者一个写 锁,那么它不能再执行read_lock(x)操作
•
•
如果事务T已经持有数据项x上的一个读锁或者一个写
锁,那么它不能再执行write_lock(x)操作 如果事务T没有持有数据项x上的一个读锁或者一个写 锁,那么它不能执行unlock(x)操作
2 基于封锁的并发控制方法概述
分 布 式 数 据 库 基 本 封 锁 算 法
2. 主站点封锁法
定义一个站点为主站点,负责系统全部封锁管理
所有站点都向主站点提出封锁和解锁请求,由它去 处理 缺点有:
• • 所有封锁请求都送往单个站点,容易由于超负荷造成“瓶颈
”
主站点故障会使系统瘫痪,封锁消息都在这里,制约了系统 可用性和可靠性
分布式环境下的并发控制与封锁
姓名: 专业: 学号:
主 要 内 容
1 并发控制概念
2 基于封锁的并发控制方法概述
1 .1并发控制的概念
通常,数据库总有若干个事务在运行,这些事务可能 并发地存取相同的数据,称为事务的并发操作。 当数据库中有多个事务并发执行时,系统必须对并发 事务之间的相互作用加以控制,这是通过并发控制机 制来实现的。 并发控制就是负责正确协调并发事务的执行,保证这 种并发的存取操作不至于破坏数据库的完整性和一致 性,确保并发执行的多个事务能够正确地运行并获得 正确的结果。 分布式数据库中的并发控制解决多个分布式事务对数 据并发执行的正确性,保证数据库的完整性和一致性 。比集中式并发控制更复杂。
可减少传输量
2 基于封锁的并发控制方法概 述
分 布 式 数 据 库 基 本 封 锁 算 法
4. 快照方法
快照方法类似于视图的一种导出关系,但又与视图不
同。它是实际数据的暂时凝聚,是数据库的一种存储方 式。 快照方法不考虑数据的复制,只考虑每一数据的“主 副本”和定义在这些“主副本”上的任意多个快照。快 照可以定义为一个或多个“主副本”的部分拷贝,也可 以定义为某个或某些“主副本”的全拷贝。
t4 t5
UPDATHale Waihona Puke Baidu x 70
注:在时间t5事务T2仍认为x的值是100
1 .1并发控制的概念
并 发 控 制 问 题 之 三: 读 脏 数 据
时间 t0 更新事务T1 数据库中A的值 100 更新事务T2
t1
t2 t3 t4 t5 t6
FIND x
x:=x-10 UPDATE x 90(脏数据) ROLLBACK 100 FIND x
2 基于封锁的并发控制方法概述
锁的转换
封 锁 准 则 和 锁 的 转 换
1. 特定条件下,一个已经在数据项x上持有锁的事务T
,允许将某种封锁状态转换为另外一种封锁状态 2. 比如,一个事务先执行了read_lock(x)操作,然后 他可以通过执行write_lock(x)操作来升级该锁 3. 同样,一个事务先执行了write_lock(x) 操作,然后 他可以通过执行read_lock(x) 操作来降级该锁
1 .1 并发控制的概念
集 中 式 DB 环 境
T1
T2
„
Tn
DB (一致性 约束)
1 .1并发控制的概念
分 布 式 DB 环 境 X
T1
T2
Y
Z
1 .1并发控制的概念
多处理器
并 发 执 行
CPU1 CPU2
T1 T2
Time
1 .1并发控制的概念
单处理器
T1
T2
T1
T2
非 并 发 执 行
CPU
并发控制算法
悲观法
乐观法
加锁法
时标排序法
混合法
加锁法
时序排序法
集中式加锁
基本时标排序
主副本加锁
多版本时标排序
并发控制算法分类
分布式加锁 保守时标排序
1 .2 并发控制机制的常用方法及其分 类 • 封锁法
• 事务的同步化是通过对数据库的片断或者数据项进行物理或逻 辑封锁来实现的 • 封锁对象的大小通常称为封锁粒度 • 封锁方法的类型可以根据在哪里进行封锁来进一步细分
如果事务T执行read_lock(x)操作,数据项x必须没有加
锁或者已经加了读锁,否则事务T的这个操作不能进行 如果事务T执行write_lock(x)操作,数据项x必须没有 加锁,否则事务T的这个操作不能进行
2 基于封锁的并发控制方法概述
封锁准则:
封 锁 准 则 和 锁 的 转 换 • • 事务T在完成所有read_item(x)和write_item(x)
基 本 思 想 和 概 念
粒度大,并发度低,锁开销小
• 如果是磁盘块,封锁磁盘块中的一条记录B的事务T必须封 锁整个磁盘块 • 而另外一个事务S如果要封锁记录C,而C也在磁盘块中,由 于磁盘块正在封锁中,S只能等待 • 如果是封锁粒度是一条记录的话,就不用等待了
2 基于封锁的并发控制方法概述
如何来确定粒度 取决于参与事务的类型 如果参与事务都访问少量的记录,那么选择 一个记录作为粒度较好 如果参与事务都访问同一文件中大量的记录 ,则最好采用块或者文件作为粒度
2 基于封锁的并发控制方法概述
锁的操作 基 本 思 想 和 概 念
Read_lock(x):读锁 Write_lock(x):写锁 unlock(x):解锁
数据项的状态
read_locked: 读锁 Write_locked:写锁
具体操作方法
在系统锁表中记录关于锁的信息 锁表中每条记录有四个字段:<数据项名称,锁状态,读锁的 数目,正在封锁该数据项的事务> 锁状态是上面两种,没有被封锁的数据项,在系统表中没有 记录
谢谢!
注: 事务T2依赖于事务T1的未完成更新
1 .2并发控制机制的常用方法及其分 类
• 保证只产生可串行化调度的机制 • 并发控制机制分类
• 按分配模式(数据方式) • 完全复制的DB • 部分复制DB或分片的DB • 按网络类型(通信方式) • 广播能力的 • 星型网, 环形网 • 同步化原则 • 建立在相互排斥地访问共享数据基础上的算法 • 通过一些准则(协议)对事务进行排序的算法 • 悲观并发控制法(事务是相互冲突的),乐观并发控制法(没有 太多的事务相互冲突)
T1
read_lock(Y);
T2
read_lock(X);
T1
read_lock(Y); read_item(Y); unlock(Y);
T2
满足封锁规则不 能保证产生串行 化调度
read_item(Y); read_item(X); unlock(Y); write_lock(X) ; unlock(X); write_lock(Y) ;