- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle多粒度锁机制介绍
根据保护对象的不同,Oracle数据库锁可以分为以下儿大类:
(1) DML lock (data locks,数据锁):用于保护数据的完整性;
(2) DDL lock (dictionary locks,字典锁):用于保护数据库对象的结构(例 如表、视图、索引的结构定义);
(3) Internal locks和latches (内部锁与闩):保护内部数据库结构;
(4) Distributed locks (分布式锁):用于OPS (并行服务器)中;
(5) PCM locks (并行高速缓存管理锁):用于OPS (并行服务器)中。
在Oracle中最主要的锁是DML (也可称为dala locks,数据锁)锁。从封锁粒 度(封锁对象的大小)的角度看,Oracle DML锁共有两个层次,即行级锁和表 级锁。
1 Oracle的TX锁(行级锁、事务锁)
许多对Oracle不太了解的技术人员可能会以为每一个TX锁代表一条被封锁的数 据行,其实不然。TX的本义是Transact io n (事务),当一个事务第一次执行数 据更改(Insert、Update Delete)或使用 SELECT- FOR UPDATE 语句进行查询 时,它即获得一个TX (事务)锁,直至该事务结束(执行COMMIT或ROLLBACK 操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数 据行(在我们用的时候多是启动一个事务,然后SELECT- FOR UPDATE NOWATT) o
在0racle的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle 不像DB2那样,建立一个链表来维护每一行被加锁的数据,这样就大大减小了行 级锁的维护开销,也在很大程度上避免了类似DB2使用行级锁时经常发生的锁数 量不够而进行锁升级的情况。数据行上的锁标志一旦被置位,就表明该行数据被 加X锁,Oracle在数据行上没有S锁。
3.2 TM锁(表级锁)
3. 2.1意向锁的引出
表是由行组成的,当我们向某个表加锁时,一方而需要检查该锁的申请是否与原 有的表级锁相容;另一方面,述要检查该锁是否与表中的毎一行上的锁相容。比 如一个事务要在一个表上加S锁,如果表中的一行己被另外的事务加了X锁,那 么该锁的审请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大, 系统的性能将会受到影响。为了解决这个问题,可以在表级引入新的锁类型來表 示其所属行的加锁情况,这就引出了〃意向锁〃的概念。
意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加 锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行 加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对 表加锁时,就不再需要检查表屮每行记录的锁标志位了,系统效率得以大大提高。
3. 2.2意向锁的类型
由两种基本的锁类型(S锁、X锁),可以自然地派生出两种意向锁:
意向共享锁(Intent Share Lock,简称IS锁):如果要对一个数据库对象加S 锁,首先要对其上级结点加IS锁,表示它的后裔结点拟(意向)加S锁; 意向排它锁(Intent Exclusive Lock,简称IX锁):如果要对一个数据库对象 加X锁,首先要对其上级结点加IX锁,表示它的后裔结点拟(意向)加X锁。
另外,基本的锁类型(S、X)与意向锁类型(1S、IX)之间述可以组合出新的锁 类型,理论上可以组合出4种,B|J: S+IS, S+IX, X+IS, X+IX,但稍加分析不难 看出,实际上只有S+IX有新的意义,其它三种组合都没有使锁的强度得到提高 (即:S+IS二S, X+IS二X, X+IX二X,这里的〃二〃指锁的强度相同)。所谓锁的强度 是指对其它锁的排斥程度。
这样我们又可以引入一种新的锁的类型:
共享意向排它锁(Shared Intent Exclusive Lock,简称SIX锁):如果对一个 数据库对象加SIX锁,表示对它加S锁,再加IX锁,即SIX二S+IX。例如:事务 对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同吋会 更新个别行(所以要对该表加IX锁)。
这样数据库对象上所加的锁类型就可能有5种:即S、X、1S、IX、SIXo
具有意向锁的多粒度封锁方法中任意事务T要对一个数据库对象加锁,必须先对 它的上层结点加意向锁。申请封锁时应按自上而下的次序进行;释放封锁时则应 按自下而上的次序进行;具有意向锁的多粒度封锁方法提高了系统的并发度,减 少了加锁和解锁的开销。
3.3 Oracle的TM锁(表级锁)
Oracle的DML锁(数据锁)正是采用了上面提到的多粒度封锁方法,其行级锁 虽然只有一种
文档评论(0)