- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQLServeramp;5中的隔离级别
SQL Server 2000 2005中的隔离级别 解振宇 客户技术经理 客户售前技术部 微软中国有限公司广州办事处 议程 可用性 ACID 属性 理解隔离级别 控制隔离级别 SQL语句中的 Read Committed “快照” 使用“快照”隔离级别 升级所带来的影响 潜在的问题 可用性 ACID 事务设计的要求 Atomicity Consistency Isolation Durability 隔离级别 Level 0 – Read Uncommitted Level 1 – Read Committed Level 2 – Repeatable Reads Level 3 – Serializable SQL 2000/2005中的默认隔离级别, ANSI/ISO Level 1, Read Committed 基于锁机制实现 ACID 的属性 Atomicity(原子) 事务是运算中的最小单位;要么全部修改,要么保持原状 Consistency(一致) 事务完成后,数据及相关结构必须处于一致的状态 Isolation(隔离) 在并发环境中,一个事务所能够获取的数据要么处于其他事务开始之前的状态,要么处于其他事物结束之后的状态;不允许获取其他事物处理过程中的数据。 Durability(持久) 即使系统出错,事务也应被保持 隔离级别 0 – Read Uncommitted现象: 脏读 能够读取其他事物中尚未提交的数据——产生脏读 DML 语句总是采用排他锁 实现: 对于允许脏读的事务,不产生行级锁 (产生SCH_S锁) ;产生脏读时,将忽略所获取数据对象的锁机制 产生的现象: 基于不准确(一致)的数据产生查询结果,所涉及的数据集在读取过程中可能发生变化甚至消失(ROLL BACK) 隔离级别 1 – Read Committed现象: 不一致的分析 所有版本中的默认行为 不能读取其他事务中正在修改的数据 ,只有提交后的数据是可见的 DML 语句总是使用排他锁 实现: 锁被释放之后,数据才能够被读取 ,在某些情况下,同一行数据可能被读取多次 产生的现象: 在整个事务周期中,同一行数据的读取操作不能够重复 ——所获取的同一行数据可能会不一致 隔离级别 2 – Repeatable Read现象: 幻读 事务中所涉及的数据不能被其他事务修改 事务中未被修改的数据能够被其他事务读取, 同时,不允许DML操作 实现: 在整个事务过程当中,对所涉及的数据加锁,数据在整个事务过程当中能够被重复读取 产生的现象: 在读取操作所产生的结果集中可能会出现事务开始时不存在的数据 隔离级别 3 – Serializable现象: 无 事务中所涉及的数据不能被其他事务修改 事务中未被修改的数据能够被其他事务所读取,同时,不允许 DML操作 实现: 在整个事务过程当中,所涉及的数据以及索引都将被加锁,以防止数据被添加到特定的数据集中 副作用: 为了防止幻读,数据集将会被锁定;如果没有对应的索引,将会产生一个表级锁 数据隔离的实现 在默认情况下,所有版本的SQL Server , 包括SQL Server 2005 ,都采用基于锁的方式来实现数据隔离 在默认环境下,为了减少各种异常情况的产生,在事务周期内确实有可能需要更高级别的锁——可能导致阻塞 在数据必须隔离的环境中,锁机制帮我们实现这种隔离 数据隔离的实现(续) SQL Server 2005 除了提供基于锁机制的数据隔离,同时还提供了基于数据版本(row-level versioning)的隔离方式 基于数据版本的隔离方式提供两种方式 Read Committed using Statement-level Snapshot语句级的读取一致性 事务级的读取一致性 Snapshot Isolation(快照隔离级别) 设置隔离行为 默认行为 Read Committed using Statement-Level Snapshot Snapshot Isolation Both RCSI and Snapshot Isolation Read Committed默认行为 所有副作用 – 除了脏读,即使在一条查询语句( select )中 在某些频繁更新的数据库中,一个长时间运行的查询语句可能会产生不一致的结果 提高隔离级别 延长数据加锁时间 可能会产生阻塞 最小化阻塞 编写高效率的事务 —— 保持简短、通过成批( batch )的方式完成任务 在事务当中,尽可能避免用户交互 采用索引,只锁定必要的数据 考虑将运行时间超长的查询语句转移到另一个只读数据库上 长时间运行的事务容易引起锁阻塞 理解隔离级别在多语句的事务环境中 理解隔离级别在多语句的事
文档评论(0)