《数据库中并发控制》PPT课件.ppt

上传人:w****2 文档编号:16567308 上传时间:2020-10-13 格式:PPT 页数:29 大小:5.12MB
返回 下载 相关 举报
《数据库中并发控制》PPT课件.ppt_第1页
第1页 / 共29页
《数据库中并发控制》PPT课件.ppt_第2页
第2页 / 共29页
《数据库中并发控制》PPT课件.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
第十四章 并发控制 了解并发访问带来的问题 理解锁、锁定和锁定协议的相关概念 理解活锁与死锁的概念 理解锁的粒度 掌握 Oracle中的锁的分类及特点 掌握通过 SQL*Plus检测与解决锁争用 1 目标 事务的并发 在一般的数据库应用中,不太可能出现在一个时 刻有且只有一个事务在操作数据库的情况,对于 大多数数据库应用来说,往往都会出现两个或两 个以上事务试图修改数据库中的同一个数据的情 况,这种情况就被称为事务的并发。 2 事务并发带来的问题 丢失修改 脏读 不可重复读 T1 T2 T1 T2 T1 T2 读 A 26 读 A 26 做 A A 6 写回 A 20 读 A 26 读 A 26 读 A 20 读 A 26 做 A A 6 写回 A 20 做 A A 4 写回 A 22 撤销 读 A 20 做 A A 2 写回 A 24 (数据库中 最后为 24) ( A恢复为 26) ( A为 20, 与数据 库中的 26不相 同) 锁与锁定 锁与锁定是实现并发控制的非常重要的技术。锁是多个 用户能够同时操纵同一个数据源而不会出现数据不一致 现象的重要保障,是防止其他事务访问指定的资源控制、 实现并发控制的一种主要手段。如果一个数据库对象被 添加了锁,则此数据库对象就有了一定的访问限制,也 就是说对此数据库对象进行了锁定操作。所谓锁定是数 据库用来同步多个用户对同一个数据库对象访问的一种 机制。通过锁定可以阻止其他事务造成的负面影响,当 事务不再依赖锁定的数据资源时,可以将锁释放。 3 愿 意 等 开 始 操 作 时 请 求 锁 定 被 操 作 对 象 获 得 锁 锁 定 对 象 操 作 对 象 ( 此 时 其 他 事 务 不 能 同 时 操 作 对 象 ) 操 作 结 束 或 事 务 结 束 释 放 锁 开 始 是 否 是 否 锁定的流程图 锁的基本类型 独占锁 独占锁是对锁定的资源只允许进行锁定操作的事务使用的,独占锁又称为写 锁,表示如果某事务在数据库对象 A上加了独占锁,则只允许该事务对 A进行 操作,其他任何事务都既不能对 A进行操作或者加锁,直到该事务释放 A上的 独占锁为止。这就确保不会同时有多个事务对同一数据库对象进行操作。 共享锁 共享锁是指对不更改或不更新数据的读取操作的事务使用的,共享锁又称为 读锁,它是非独占的,允许多个并发事务读取其锁定的数据库对象。如果某 个事务在数据库对象 A上加了共享锁,则只允许该事务读取 A但不能更改 A。 其他任何其他事务也可以同时对 A进行读取操作,但不能更改 A,这样就确保 了多个事务可以对保护的数据库对象同时进行读操作,但不能同时进行写操 作。 独占锁和共享锁锁定的示意图 6 数 据 库 对 象 A 事 务 T 事 务 T i T 可 读 , 可 写 A T i 不 可 读 , 不 可 写 A 1 ) 加 X 锁 2 ) 即 不 能 加 S 锁 , 也 不 能 加 X 锁 数 据 库 对 象 A 事 务 T 事 务 T i T i 可 读 , 但 不 可 写 A 1 ) 加 S 锁 2 ) 只 能 加 S 锁 , 但 不 能 加 X 锁 S 锁 X 锁 T 可 读 , 但 不 可 写 A 锁定协议 一级锁定协议 事务在修改数据库对象 A之前,必须先对其加独占锁,并直到事务结束时才 释放该独占锁,如果事务仅仅是读取 A,则不需要加任何锁。 二级锁定协议 二级锁定协议是在一级锁定协议的基础上,加上事务在读取 A之前必须加共 享锁,读完后立即释放共享锁。 三级锁定协议 三级锁定协议是在二级锁定协议的基础上,加上事务在读取 A之前必须加共 享锁,直到事务结束后才释放共享锁 。 锁定协议主要分为如下 3个级别 : 不同级别的锁定协议及其作用 申请的锁 及其作用 锁定协议 修改时申请独占 锁 读取时申请共享 锁 作用 操作结 束 释 放 事务结 束 释 放 操作结 束 释 放 事务结 束 释 放 不丢失修 改 不脏读 可重复读 一级锁定协议 是 是 二级锁定协议 是 是 是 是 三级锁定协议 是 是 是 是 是 活锁与死锁 活锁 多个事务并发执行的过程中,可能会存在某个有机会获得锁的事务却永远也没 有得到锁,这种现象称为活锁。 死锁 在多个事务并发执行的过程中,还会出现另外一种现象,即多个并发事务处于 相互等待的状态,其中的每一个事务都在等待它们中的另一个事务解除锁定, 这样才可以继续执行下去,但任何一个事务都没有释放自己已获得的锁,也就 无法获得其他事务已拥有的锁,所以只好相互等待下去。因此产生死锁的原因 是两个或多个事务都锁定了一些数据库对象,然后又都需要锁定对方的数据库 对象失败而需要等待所造成的。 活锁的例子 T1 T2 T3 T4 Lock A成功 Lock A失败 等待 等待 Lock A失败 等待 Unlock A 等待 等待 等待 Lock A成功 等待 Lock A失败 等待 等待 Unlock A 等待 等待 Lock A成功 死锁的例子 T1 T2 Lock A1成功 Lock A2成功 Lock A2失败 等待 等待 Lock A1失败 等待 等待 等待 等待 等待 等待 等待 等待 等待 死锁的预防 一次锁定法 该方法要求每个事务必须一次将所有要使用的数据库对象全部锁定,否则就 不继续执行。在之前表 14- 5中的例子中,如果事务 T1一次就将数据库对象 A1、 A2全部都锁定的话, T1就会执行下去。 T2开始是等待的,但在 T1执行 完毕释放锁之后, T2就可以锁定 A1、 A2了,也就可以执行下去了。 顺序锁定法 顺序锁定法要求预先对数据库对象规定一个锁定的顺序,所有事务都按这个 顺序来实行锁定。在之前表 14- 5中的例子中,规定锁定顺序是 A1、 A2,事 务 T1 和 T2都按此顺序锁定,即 T2也必须首先锁定 A1。当 T2请求锁定 A1 时, 由于 A1被 T1锁定,所以 T2只能等待,当 T1释放 A1和 A2上的锁后, T2就可以 锁定 A1了,也就可以执行下去了。 诊断与解除死锁 超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实 现简单,但其不足也很明显。一是有可能误判死锁,当事务因为其他原因使 得等待时间超过时限,系统会误认为发生了死锁。二是时限若设置的太长, 死锁发生后不能及时发现。 顺序锁定法 该方法是用离散数学的图论来诊断死锁的方法。事务的等待图是一个有向图 G=(T,U)。 T为所数据库系统中正在运行的各个事务的节点的集合, U为有 向边的集合,每条边表示事务等待的情况。如果 T1事务等待 T2事务,则在 T1、 T2节点之间就有一条从 T1指向 T2的有向边。事务等待图动态地反映了 当前的各个事务之间的等待情况。 锁的粒度 依据数据库的结构层次,可以将锁的粒度从高到 低依次划分为:数据库、表、记录、列。 数 据 库 D 表 A 表 B 记 录 r 1 记 录 r 2 列 c 1 列 c 2 . . . . . . . . . Oracle中锁的分类 DDL锁(字典锁) DML锁(数据锁) Oracle中锁的级别 在 Oracle中可以在数据库、数据表、数据表中的行这 3 个数据对象上使用锁,但不支持对数据表中的列使用锁。 数据库级别的锁 表级别的锁 行级别的锁 3 通过 SQL*Plus检测与解决锁争用 在 Oracle的会话中, sys用户可以通过查询与锁相关的 视图来查看锁的信息,了解阻塞会话与被阻塞会话的 sid、 serial、用户名及其所使用的 DML操作语句等内容。 3 首先在 SQL*Plus中执行两个会话,这两个会话登录的用户都为 scott用户, 并对同一资源(数据行)进行操作,使之产生资源争用,其中一会话处于阻塞 状态,产生阻塞的会话和被阻塞的会话如下 图 所示。 产 生 阻 塞 的 会 话 被 阻 塞 的 会 话 通过 OEM检测与解决锁争用 在浏览器地址栏中输入: http:/localhost:5500/em就会进入登陆界面 2 通过 OEM检测与解决锁争用 首先以 sys用户并以 sysdba身份登录 OEM,进入“主目录”页 面,在该页面中单击“性能”超链接,进入“性能”属性页面。 然后单击“性能”属性页面中“其他监视链接”标题下的“数 据库锁”超连接,将进入“数据库锁”页面。 2 通过 OEM检测与解决锁争用 会话详细信息页面 在该页中可以查看数据库中当前用户的锁的详细信息,包括用 户名、有关锁的会话标识号、锁的类型、锁的模式、被锁定的 对象、从获得锁到现在所过的时间等。单击该页面中的“刷新” 按钮,将会显示此时此刻数据库中所包含的锁的信息。 2 SQL详细资料页面 查看会话详细信息后,返回“数据库锁”页面。在 该页面的“ SQL散列值” (SQL/ID)列中,单击某个 散列值,将进入 “ SQL详细资料”页面。 2 确认页面 查看会话详细信息后,返回“数据库锁”页面。在该页面的 “选择”列中,选中一个要中断的会话(如阻塞者会话),单 击“中断会话”按钮,将进入 “确认”页面。 2 SQL页面 单击该页面中的“显示 SQL”按钮,将显示 “ SQL”页面。在该 页中显示了在数据库中杀死该会话所使用的 SQL语句。 2 数据库锁页面 返回“确认”页面后,在该页面中单击“是”按钮,将开始杀 死该会话,最后返回“数据库锁”页面。如果成功,将会显示 “会话已成功终止”的信息。 2 并发的事务之间可能会发生访问冲突,这就需要一个能自动解决事务对数据的并发访 问所带来的问题的机制,这种机制就是并发控制 锁技术可以有效的解决并行操作的一致性问题 不同的数据库管理系统提供的锁实现不尽相同,但是基本原理和技术是相同的 锁有两种最基本的类型:独占锁和共享锁 锁定的粒度与系统的并发度和并发控制的开销密切相关。一般来讲,锁定的粒度越大, 需要锁定的对象就越少,可选择性就越小,并发度就越小,开销就越小;反之,锁定的 粒度越小,需要锁定的对象就越多,可选择性就越大,并发度就越大,开销就越大 在多个事务并发执行的过程中可能出现死锁,可以使用一次锁定法或顺序锁定法预防死 锁,使用超时法或等待图法来解除死锁。 Oracle中的锁按照操作可以划分为 DDL锁(字典锁)和 DML锁(数据锁)。 Oracle数据库锁的级别有数据库级锁、表级锁、行级锁 可以通过 SQL*Plus和 OEM检测 Oracle中的死锁问题 31 小结 谢 谢!
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!