第十章数据库并发控制及SQL Server并发控制.ppt_第1页
第十章数据库并发控制及SQL Server并发控制.ppt_第2页
第十章数据库并发控制及SQL Server并发控制.ppt_第3页
第十章数据库并发控制及SQL Server并发控制.ppt_第4页
第十章数据库并发控制及SQL Server并发控制.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 2 3 10 1事务及并发控制的基本概念10 2封锁机制10 3SQLServer的并发控制机制 2020 2 3 在多用户和网络环境下 数据库是一个共享资源 多个用户或应用程序同时对数据库的同一数据对象进行读写操作 这种现象称为对数据库的并发操作 显然并发操作可以充分利用系统资源 提高系统效率 虽然如此 但是如果对并发操作不进行控制会造成一些错误 对并发操作进行的控制称为并发控制 并发控制机制是衡量一个DBMS的重要性能指标之一 2020 2 3 10 1事务及并发控制的基本概念 10 1 1事务的概念所谓事务是用户定义的一个数据库操作序列 这些操作要么全做要么全不做 是一个不可分割的工作单位 事务的开始与结束可以由用户显式定义 如果用户没有显式地定义事务 则由DBMS按默认自动划分事务 在SQL语言中 定义事务的语句有三条 BEGINTRANSACTION 事务通常是以BEGINTRANSACTION开始 COMMIT COMMIT的作用是提交事务的所有操作 事务提交是将事务中所有对数据的更新写回到磁盘上的物理数据库中去 事务正常结束 ROLLBACK ROLLBACK的作用是回滚 即在事务运行的过程中发生了某种故障 事务不能继续执行 系统将事务中对数据库的所有已完成的操作全部撤消 回滚到事务开始时的状态 2020 2 3 10 1 2事务的特性事务具有4个特性 即原子性 一致性 隔离性和持续性 原子性 Atomicity 事务中包括的诸操作要么都做 要么都不做 也就是说 事务是作为一个整体单位被处理 不可以被分割 一致性 Consistency 事务执行的结果必须使数据库处于一个一致性状态 当数据库中只包含成功事务提交的结果时 就说数据库处于一致性状态 隔离性 1solation 一个事务的执行不能被其他事务干扰 即一个事务内部的操作及使用的数据对其他并发事务是隔离的 并发执行的各个事务之间不能互相干扰 持续性 Durability 持续性也称永久性 Permanence 持续性指一个事务一旦提交 它对数据库中数据的改变就是永久性的 接下来的其他操作或故障不应该对其执行结果有任何影响 2020 2 3 10 1 3并发操作可能产生的问题并发操作不加以限制 会产生数据不一致性问题 这种问题共有三类 丢失更新假设某产品库存量为50 现在购入该产品100个 执行入库操作 库存量加100 用掉40个 执行出库操作 库存量减40 分别用T1和T2表示入库和出库操作任务 例如 同时发生入库 T1 和出库 T2 操作 这就形成并发操作 T1读取库存后 T2也读取了同一个库存 T1修改库存 回写更新后的值 T2修改库存 也回写更新后的值 此时库存为T2回写的值 T1对库存的更新丢失 如表10 1所示T1和T2的并发操作执行顺序 发生了 丢失更新 错误 2020 2 3 表10 1发生丢失更新的过程 2020 2 3 读 脏数据 当T1和T2并发执行时 在T1对数据库更新的结果没有提交之前 T2使用了T1的结果 而在T2操作之后T1又回滚 这时引起的错误是T2读取了T1的 脏数据 表10 2发生读 脏数据 的过程 2020 2 3 不可重复读当T1读取数据A后 T2执行了对A的更新 当T1再次读取数据A 希望与第一次是相同的值 时 得到的数据与前一次不同 这时引起的错误称为 不可重复读 表10 3发生 不可重复读 的过程 2020 2 3 并发操作之所以产生错误 是因为任务执行期间相互干扰造成的 当将任务定义成事务 事务具有的特性 特别是隔离性 得以保证时 就会避免上述错误的发生 但是 如果只允许事务串行操作会降低系统的效率 所以 多数DBMS采用事务机制和封锁机制进行并发控制 既保证了数据的一致性 又保障了系统效率 2020 2 3 10 2封锁机制 10 2 1封锁及锁的类型封锁机制是并发控制的主要手段 封锁具有3个环节 第一个环节是申请加锁 第二个环节是获得锁 第三个环节是释放锁 为了达到封锁的目的 在使用时事务应选择合适的锁 并要遵从一定的封锁协议 基本的封锁类型有两种 排它锁 ExclusiveLocks 简称X锁 和共享锁 ShareLocks 简称S锁 排它锁排它锁也称为独占锁或写锁 一旦事务T对数据对象A加上排它锁 X锁 则只允许T读取和修改A 其他任何事务既不能读取和修改A 也不能再对A加任何类型的锁 直到T释放A上的锁为止 共享锁共享锁又称读锁 如果事务T对数据对象A加上共享锁 S锁 其他事务对A只能再加S锁 不能加X锁 直到事务T释放A上的S锁为止 2020 2 3 10 2 2封锁协议简单地对数据加X锁和S锁并不能保证数据库的一致性 在对数据对象加锁时 还需要约定一些规则 这些规则称为封锁协议 LockingProtocol 对封锁方式规定不同的规则 就形成了各种不同的封锁协议 一级封锁协议一级封锁协议是 事务T在修改数据之前必须先对其加X锁 直到事务结束才释放 根据该协议要求 将表10 1种的任务T1 T2作为事务 用A表示库存 重新执行各操作的过程见表过程见表10 4 2020 2 3 表10 4遵循一级封锁协议的事务执行过程 2020 2 3 一级封锁协议可有效地防止 丢失更新 并能够保证事务T的可恢复性 但是 由于一级封锁没有要求对读数据进行加锁 所以不能保证可重复读和不读 脏 数据 表10 5遵从一级封锁协议发生的读 脏 数据过程 2020 2 3 二级封锁协议二级封锁协议是 事务T对要修改数据必须先加X锁 直到事务结束才释放X锁 对要读取的数据必须先加S锁 读完后即可释放S锁 表10 6遵从二级封锁协议发生的 不可重复读 的过程 2020 2 3 三级封锁协议三级封锁协议是事务T在读取数据之前必须先对其加S锁 在要修改数据之前必须先对其加X锁 直到事务结束后才释放所有锁 由于三级封锁协议强调即使事务读完数据A之后也不释放S锁 从而使得别的事务无法更改数据A 三级封锁协议不但防止了丢失修改和不读 脏 数据 而且防止了不可重复读 2020 2 3 10 2 3封锁出现的问题及解决方法事务使用封锁机制后 会产生活锁 死锁等问题 DBMS必须妥善地解决这些问题 才能保障系统的正常运行 活锁如果事务T1封锁了数据R T2事务又请求封锁R 于是T2等待 T3也请求封锁R 当T1释放了R上的封锁之后系统首先批准了T3的要求 T2仍然等待 然后T4又请求封锁R 当T3释放了R上的封锁之后系统又批准了T4的请求 T2有可能永远等待 这种在多个事务请求对同一数据封锁时 使某一用户总是处于等待的状况称为活锁 解决活锁问题的方法是采用先来先服务 即对要求封锁数据的事务排队 使前面的事务先获得数据的封锁权 2020 2 3 死锁如果事务T1和T2都需要数据Rl和R2 操作时Tl封锁了数据R1 T2封锁了数据R2 然后T1又请求封锁R2 T2又请求封锁Rl 因T2已封锁了R2 故T1等待T2释放R2上的锁 同理 因T1已封锁了R1 故T2等待T1释放R1上的锁 由于Tl和T2都没有获得全部需要的数据 所以它们不会结束 只能继续等待 这种多事务交错等待的僵持局面称为死锁 数据库中解决死锁问题主要有两类方法 一类方法是采用一定措施来预防死锁的发生 另一类方法是允许发生死锁 然后采用一定手段定期诊断系统中有无死锁 若有则解除之 2020 2 3 10 2 3封锁的粒度封锁粒度 Granularity 是指封锁对象的大小 封锁对象可以是逻辑单元 也可以是物理单元 以关系数据库为例 封锁对象可以是属性值 属性值的集合 元组 关系 直至整个数据库 也可以是一些物理单元 例如页 数据页或索引项 块等 封锁粒度与系统的并发度和并发控制的开销密切相关 封锁的粒度越小 并发度越高 系统开销也越大 封锁的粒度越大 并发度越低 系统开销也越小 2020 2 3 10 3SQLServer的并发控制机制 事务和锁是并发控制的主要机制 SQLServer通过支持事务机制来管理多个事务 保证数据的一致性 并使用事务日志保证修改的完整性和可恢复性 SQLServer遵从三级封锁协议 从而有效的控制并发操作可能产生的丢失更新 读 脏 数据 不可重复读等错误 SQLServer具有多种不同粒度的锁 允许事务锁定不同的资源 并能自动使用与任务相对应的等级锁来锁定资源对象 以使锁的成本最小化 2020 2 3 10 3 1SQLSServer的事务类型SQLServer的事务分为两种类型 系统提供的事务和用户定义的事务 系统提供的事务是指在执行某些语句时 一条语句就是一个事务 它的数据对象可能是一个或多个表 视图 可能是表 视图 中的一行数据或多行数据 用户定义的事务以BEGINTRANSACTION语句开始 以COMMIT 事务提交 或ROLLBACK 回滚 结束 对于用户定义的分布式事务 其操作会涉及到多个服务器 只有每个服务器的操作都成功时 其事务才能被提交 否则 即使只有一个服务器的操作失败 整个事务就只有回滚结束 2020 2 3 10 3 2SQLSServer锁的粒度和类型SQLServer锁的粒度锁是为防止其他事务访问指定的资源 实现并发控制的主要手段 要加快事务的处理速度并缩短事务的等待时间 就要使事务锁定的资源最小 SQLServer为使事务锁定资源最小化提供了多粒度锁 行级锁表中的行是锁定的最小空间资源 行级锁是指事务操作过程中 锁定一行或若干行数据 页和页级锁在SQLServer中 除行外的最小数据单位是页 一个页有8KB 所有的数据 日志和索引都放在页上 为了管理方便 表中的行不能跨页存放 一行的数据必须在同一个页上 页级锁是指在事务的操作过程中 无论事务处理多少数据 每一次都锁定一页 2020 2 3 簇和簇级锁页之上的空间管理单位是簇 一个簇有8个连续的页 簇级锁指事务占用一个簇 这个簇不能被其他事务占用 表级锁表级锁是一种主要的锁 表级锁是指事务在操纵某一个表的数据时锁定了这些数据所在的整个表 其他事务不能访问该表中的数据 当事务处理的数量比较大时 一般使用表级锁 数据库级锁数据库级锁是指锁定整个数据库 防止其他任何用户或者事务对锁定的数据库进行访问 这种锁的等级最高 因为它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论