隔离级别的性能影响.doc

上传人:大米 文档编号:543039644 上传时间:2022-10-31 格式:DOC 页数:4 大小:46.01KB
返回 下载 相关 举报
隔离级别的性能影响.doc_第1页
第1页 / 共4页
隔离级别的性能影响.doc_第2页
第2页 / 共4页
隔离级别的性能影响.doc_第3页
第3页 / 共4页
隔离级别的性能影响.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《隔离级别的性能影响.doc》由会员分享,可在线阅读,更多相关《隔离级别的性能影响.doc(4页珍藏版)》请在金锄头文库上搜索。

1、隔离级别的性能影响 隔离级别 确定存取数据时如何锁定数据或使数据不受其它进程影响。该隔离级别将在工作单元运行期间生效。在执行 OPEN CURSOR 的工作单元期间,使用由 WITH HOLD 子句的 DECLARE CURSOR 语句声明的游标的应用程序将保持选定的隔离级别。 DB2(R) 支持下列隔离级别: 可重复读 读稳定性 游标稳定性 未落实的读。 注: 某些主机数据库服务器支持 不落实 隔离级别。对于其它数据库, 此隔离级别的行为与未落实的读隔离级别一样。 每个隔离级别的详细说明按它们对性能的影响程度的降序排列, 但按您存取和更新数据时需要加以关心的程度的升序排列。 可重复读 可重复

2、读 (RR)会锁定应用程序在工作单元中引用的所有行。利用“可重复读”, 在打开游标的相同工作单元内一个应用程序发出一个 SELECT 语句两次,每次都能获得相同的结果。利用“可重复读”,不可能出现丢失更新、存取未落实的数据和幻像行的情况。 在该工作单元完成之前,“可重复读”应用程序可以尽可能多次地检索和操作这些行。但是, 在该工作单元完成之前其它应用程序均不能更新、 删除或插入可能会影响结果表的行。“可重复读”应用程序不能查看其它应用程序的未落实更改。 利用“可重复读”,将会锁定引用的每一行,而不仅仅是检索的那些行。执行了适当的锁定,因此其它应用程序不能插入或更新行(该行可能要添加到查询所引用

3、的行的列表中,如果重新执行查询的话)。这将防止出现幻像行。例如,如果您扫描 10000 行并对它们应用谓词,尽管只有 10 行满足条件,但仍会锁定全部的 10000 行。 注: “可重复读”隔离级别确保在应用程序 看到 数据之前所有返回的数据保持不变,即使使用了临时表或行分块也是如此。 由于“可重复读”可能获得和挂起大量锁定,因此这些锁定可能超出可作为 locklist 和 maxlocks 配置参数的有效结果的锁定数。 为了避免锁定升级,优化器在认为很可能会发生锁定升级的时候, 可能选择立即获得单个表级别锁定用于索引扫描。 这就象数据库管理器代表您发出了一个 LOCK TABLE 语句一样。

4、如果不想获得表级别锁定,确保有足够的锁定可用于该事务或使用“读稳定性”隔离级别。 读稳定性 读稳定性 (RS)只锁定应用程序在工作单元中检索的那些行。它确保在工作单元完成之前, 任何在工作单元运行期间的行读取限定不被其它应用程序进程更改, 且不会读取另一个应用程序进程更改的任何行,直至该进程落实更改。也就是说, 不 可能出现“不可重复读”情形。 与可重复读不同,使用“读稳定性”时,如果您的应用程序多次发出相同的查询, 则有可能看到附加的 幻像 行( 幻像读现象 )。重新调用扫描 10000 行的示例时,“读稳定性”只锁定限定的行。这样,使用“读稳定性”时,只检索 10 行, 且只对那十行挂起锁

5、定。将它与“可重复读”对比,在此示例中,可重复读会在所有的 10000 行上挂起锁定。挂起的锁定可以是共享、下次共享、更新或互斥锁定。 注: “读稳定性”隔离级别确保在应用程序 看到 数据之前所有返回的数据保持不变,即使使用了临时表或行分块也是如此。 “读稳定性”隔离级别的其中一个目标是提供较高并发性程度以及数据的稳定视图。为了有助于达到此目标,优化器确保在发生锁定升级前不获取表级锁定。 “读稳定性”隔离级别最适用于包括下列所有特征的应用程序: 在并发环境下运行 需要限定某些行在工作单元运行期间保持稳定 在工作单元中不会多次发出相同的查询,或者在同一工作单元中发出多次查询时并不要求该查询获得相

6、同的回答。 游标稳定性 游标稳定性 (CS)当在行上定位游标时会锁定任何由应用程序的事务所存取的行。 此锁定在读取下一行或终止事务之前有效。但是,如果更改了某一行上的任何数据, 则在对数据库落实更改之前必须挂起该锁定。 对于具有“游标稳定性”的应用程序已检索的行,当该行上有任何可更新的游标时, 任何其它应用程序都不能更新或删除该行。“游标稳定性”应用程序不能查看其它应用程序的未落实更改。 再次引用扫描 10000 行的示例,如果使用“游标稳定性”, 将只锁定当前游标位置以下的行。当移离该行时,也就除去了该锁定(除非更新该行)。 使用“游标稳定性”,可能会出现不可重复读和幻像读现象。“游标稳定性

7、”是缺省隔离级别, 且应在需要最大并发性,但只看到其它应用程序中的已落实行的情况下才使用。 未落实的读 未落实的读 (UR)允许应用程序存取其它事务的未落实的更改。除非其它应用程序尝试删除或改变该表, 否则该应用程序也不会锁定正读取的行而使其它应用程序不能存取该行。对于只读和可更新的游标,“未落实的读”的工作方式有所不同。 只读游标可存取大多数其它事务的未落实的更改。但是,当该事务正在处理时,正由其它事务创建或删除的表、 视图和索引不能使用。其它事务的任何其它更改在落实或回滚前都可被读取。 注: “未落实的读”隔离级别下的可更新操作的游标将按隔离级别是游标稳定性的方式工作。 当它使用隔离级别

8、UR 运行程序时,应用程序可以使用隔离级别 CS。 发生这种情况的原因是因为在应用程序中使用的游标是模糊游标。由于 BLOCKING 选项,可以将模糊游标升级为隔离级别 CS。BLOCKING 选项的缺省值是 UNAMBIG。这意味着将模糊游标当作可更新的,并且隔离级别升级为 CS。要防止此升级,有两种选择: 修改应用程序中的游标。以便这些游标是非模糊游标。将 SELECT 语句更改为包括 FOR READ ONLY 子句。 将模糊游标保留在应用程序中,但是预编译程序或用 BLOCKING ALL 选项绑定它以允许当运行该程序时将任何模糊游标作为只读的。 如对扫描 10000 行的“可重复读”

9、给出的示例一样,如果使用“未落实的读”,则不需要任何行锁定。 使用“未落实的读”,可能出现不可重复读行为和幻像读现象。“未落实的读”隔离级别最常用于只读表上的查询, 或者若仅执行选择语句且不关心是否可从其它应用程序中看到未落实的数据时也最常用。 隔离级别的总结 下表按不期望的结果总结了几个不同的隔离级别。 表 15. 隔离级别总结隔离级别 存取未落实的数据 不可重复读 幻像读现象 可重复读(RR) 不可能 不可能 不可能 读稳定性(RS) 不可能 不可能 可能 游标稳定性(CS) 不可能 可能 可能 未落实的读(UR) 可能 可能 可能 下表提供了简单的试探方法,以帮助您为应用程序选择初始隔离级别。首先考虑下表列示的方法,并参阅先前对各级因素的讨论,可能会找到另一个更适合的隔离级别。 表 16. 选择隔离级别的准则应用程序类型 需要高数据稳定性 不 需要高数据稳定性 读写事务 RS CS 只读事务 RR 或 RS UR 为一个应用程序选择适当的隔离级别对于该应用程序避免无法容忍的现象很重要。因为获取和释放锁定所需 的 CPU 和内存资源随隔离级别的不同而不同, 所以此隔离级别不但影响应用程序之间的隔离程度,而且还影响个别应用程序的性能特征。潜在的死锁情况随隔离级别的不同而不同。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号