关于尚观
最新课程体系
企业服务
零起点咨询
开放课程
报名咨询
免费资源申请
Oracle服务
学员专区&薪资
认证课程
  • 尚观首页
  • 尚观简介
  • 师资力量
  • 尚观文化
  • 尚观动态
  • 加入尚观
  • 联系我们
  • 珍贵瞬间
  • 院校合作
  • Linux系统与集群
  • 数据库集群架构师
  • 嵌入式内核驱动开发
  • 服务器开发架构师
  • Android开发架构师
  • RHCE/LPI认证体系
  • Oracle OCP认证
  • 企业高级技术培训
  • 批量人才供应及研发团队建设
  • 软件外包及研发项目合作
  • 人力外包及人力供应
  • 猎头服务
  • 开启职业生涯
  • 如何入门
  • Unix/Linux职业方向
  • 嵌入式职业方向
  • 集群(Cluster)Oracle(DBA)方向
  • 新手专栏
  • Android开发方向
  • Unix/Linux新手专栏
  • Unix/Linux管理
  • 嵌入式及POSIX开发
  • Linux开源文化及市场
  • 最近网络课堂
  • P2P教学视频
  • 精彩Linux培训视频
  • 零起点数据库集群(长期)
  • 嵌入式驱动(长期)
  • Linux金牌三证(RHCE级)
  • Linux架构师(RHCA级)
  • 嵌入式/驱动加速课程
  • Linux免费网络安全公开课
  • 免费Linux资料申请
  • 免费Linux安全&DDOS防御课程
  • 免费嵌入式Linux开发课程
  • 免费Linux网络安全机制
  • 尚观服务
  • 软件产品
  • 技术方案
  • 尚观支持
  • 学员毕业薪资(不断更新中)
  • 加入尚观猎头服务(仅限老学员)
  • OCP认证
  • Intel认证
  • RHCE认证
  • RHCE+OCP
  • RHCE+LPI
  • OCM认证
  • RHCA认证


    您现在的位置:尚观Linux培训 - 嵌入式Linux培训专家尚观Linux培训 » UNIX/Linux新手专栏 » Oracle多粒度封锁机制研究(一)

 
 
咨询热线
  • 免费咨询电话:
    400-700-0056
    800-810-0056

    教学就业监督电话:
    400-810-3016



  • 在线咨询
免费资源
  • -4月24日
  • [沈阳]Linux嵌入式-4月24日
  • [上海]DDos攻防-4月24日
  • [上海]Linux嵌入式-4月24日
  • [深圳]DDos攻防-4月24日
  • [深圳]Linux嵌入式-4月24日
  • [北京]DDos攻防-4月24日
  • 就业课程
  • 免费课程
  • 五万年薪就业保证课程

  • ULP-S 尚观王者IT集群课程 v8版
  • UEA嵌入式内核驱动开发者 V8版
  • UGA-Android开发架构师 V3.2版
  • ULA-Linux云计算集群架构师课程
  • UOA-Oracle数据库集群架构
  • 八万年薪就业保证课程

  • UOM- Oracle集群大师
  • UEM-嵌入式开发大师
  • 纯免费!shrek主讲 linux网络攻击及安全课程 2月8日
  • 纯免费!连续3天,Android开发入门实战免费公开课 12月27日
  • 纯免费!“云”指南“嵌入式”指北大型讲座! 12月24日
  • 纯免费!云计算虚拟化应用大型讲座! 12月17日
  • 纯免费! OCM考试经验分享! 12月7日
  • 纯免费! RHCA考试与学习经验分享! 12月13日
  • 纯免费! Android在线天气预报开发实战 11月30日
  • 纯免费! shrek主讲Linux攻防与安全! 11月24日
  • 纯免费! Redhat最高级RHCA考试与学习经验分享 11月22日
Linux培训●最新开班
  • [北京]UGA课程12月班热招!
  • [北京]UEA课程12月班热报!
  • [北京]ULP-S课程12月班热招
  • [上海]UEA课程12月班热招!
  • [上海]ULP-S课程12月班热招
  • [上海]UGA课程12月班热招!
  • [深圳]ULP-S课程12月班热招
  • [深圳]UEA课程12月班热招!
 
Oracle多粒度封锁机制研究(一)
  •  1 引言—数据库锁的基本概念

        为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。

        排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。

        共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。

        2 Oracle多粒度封锁机制介绍

        根据保护对象的不同,Oracle数据库锁可以分为以下几大类:

        (1) DML lock(data locks,数据锁):用于保护数据的完整性;

        (2) DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);

        (3) internal locks和l a t c h es(内部锁与闩):保护内部数据库结构;

        (4) distributed locks(分布式锁):用于OPS(并行服务器)中;

        (5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。

        本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)的角度看,Oracle DML锁共有两个层次,即行级锁和表级锁。

        2.1 Oracle的TX锁(行级锁、事务锁)

        许多对Oracle不太了解的技术人员可能会以为每一个TX锁代表一条被封锁的数据行,其实不然。TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行。

        在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle不象其它一些DBMS(数据库管理系统)那样,建立一个链表来维护每一行被加锁的数据,这样就大大减小了行级锁的维护开销,也在很大程度上避免了其它数据库系统使用行级封锁时经常发生的锁数量不够的情况。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁。

        2.2 TM锁(表级锁)

        2.2.1 意向锁的引出

        表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加S锁,如果表中的一行已被另外的事务加了X锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了“意向锁”的概念。

        意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。

    2.2.2 意向锁的类型

        由两种基本的锁类型(S锁、X锁),可以自然地派生出两种意向锁:

        意向共享锁(Intent Share Lock,简称IS锁):如果要对一个数据库对象加S锁,首先要对其上级结点加IS锁,表示它的后裔结点拟(意向)加S锁;

        意向排它锁(Intent Exclusive Lock,简称IX锁):如果要对一个数据库对象加X锁,首先要对其上级结点加IX锁,表示它的后裔结点拟(意向)加X锁。

        另外,基本的锁类型(S、X)与意向锁类型(IS、IX)之间还可以组合出新的锁类型,理论上可以组合出4种,即: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、IS、IX、SIX.

        具有意向锁的多粒度封锁方法中任意事务T要对一个数据库对象加锁,必须先对它的上层结点加意向锁。申请封锁时应按自上而下的次序进行;释放封锁时则应按自下而上的次序进行;具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

        2.2.3 Oracle的TM锁(表级锁)

        Oracle的DML锁(数据锁)正是采用了上面提到的多粒度封锁方法,其行级锁虽然只有一种(即X锁),但其TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁(X锁)、行级共享锁(RS锁)、行级排它锁(RX锁)、共享行级排它锁(SRX锁),与上面提到的S、X、IS、IX、SIX相对应。需要注意的是,由于Oracle在行级只提供X锁,所以与RS锁(通过SELECT … FOR UPDATE语句获得)对应的行级锁也是X锁(但是该行数据实际上还没有被修改),这与理论上的IS锁是有区别的。

        下表为Oracle数据库TM锁的相容矩阵(Y=Yes,表示相容的请求;N=No,表示不相容的请求;-表示没有加锁请求):

    T2

    T1

    S

    X

    RS

    RX

    SRX

    -

    S

    Y

    N

    Y

    N

    N

    Y

    X

    N

    N

    N

    N

    N

    Y

    RS

    Y

    N

    Y

    Y

    Y

    Y

    RX

    N

    N

    Y

    Y

    N

    Y

    SRX

    N

    N

    Y

    N

    N

    Y

    -

    Y

    Y

    Y

    Y

    Y

    Y

    表一:Oracle数据库TM锁的相容矩阵




    精彩Linux视频、嵌入式视频、Android视频、Oracle视频,免费先学!
    查看:尚观Linux培训学员最新就业薪资待遇统计报告!
    查看:UGA-4G Android开发架构师大纲
    查看:UDA-Linux服务器开发架构师大纲
    查看:UEA-嵌入式内核驱动开发者大纲
    查看:UOA-Oracle数据库集群架构大纲
    查看:ULA-Linux系统与集群架构师大纲

    填表获取 Linux、嵌入式、Oracle 技术资料

  • 姓    名:
  • 固    话:
  • 手    机:
  • E-Mail :
  • 所在地:
  •         

北京(总部)

电子地图
电话:(010)62113016/17 68949060
地址:北京海淀区中关村南大街 甲10号 银海大厦南区410-418

上海(Shanghai)

电子地图
电话:(021)64859996 64859889
地址:上海徐汇区钦江路333号漕河泾开发区38号楼申能科技3楼

深圳(Shenzhen)

电子地图
电话:(0755)82995128 82995168
地址:深圳福田区 彩田路 中深花园B2005室

沈阳(Shenyang)

电子地图
电话:(024)31500816 31500817
地址:沈阳和平区三好街54号物产科贸大厦2号楼201室

大连(Dalian)

电子地图
电话:(0411)84336822 84326822
地址:大连沙河口区西安路86号行政大厦(罗斯福广场对面)17楼1705室

成都(Chengdu)

电子地图
电话:(028)66677820 66677828
地址:成都青羊区上西顺城街252号顺吉大厦8楼B4

广州(Guangdong)

电子地图
电话:(020) 88900632 81368992
地址:广州市越秀区人民北路612号中广大厦9层(国际银行中心旁)

南京(Nanjing)

电子地图
电话:(025)83176720 83176710
地址:南京新街口广场中山东路9号天时科技园12层G、H单元

武汉(Wuhan)

电子地图
电话:(027)87596339
地址:武汉市洪山区鲁磨路118号国光大厦A座1201室1203室




2005-2009高新技术企业

LPI授权培训考试中心

CSDN战略伙伴

51Job战略伙伴

Oracle WDP授权培训与考试中心

Intel软件服务培训供应商

Redhat授权培训与考试中心

高新技术企业证书
 

友情链接(联系QQ:87865954):   LPI  RedHat  CSDN  ChinaUnix  ITPub  Eygle.Com  Linux培训  嵌入式培训  Linux联盟  Unix爱好者  51CTO开发 尚观知识库 天极导航  PHP中国  网易教育  天津赶集网  工具软件下载  连锁加盟  天极网南京站  个人简历模板  北京赶集网  畅享网  网页制作  Linux  ZOL服务器  广告联盟  颈椎病的症状  21CN教育  亿芯网  强直性脊柱炎  数码比价网  投资创业  DJ网站  嵌入式技术网  OCM培训  股票入门  大功率LED网   搜电网  杭州写字楼网  时尚论坛  医药营销联盟  Linux技术中心  泉州人才网  大学后  天天健康  RHCE培训  SVN中文技术网  网罗天下  Oracle培训  北京法律咨询  嵌入式资讯网  Fedora中文爱好者  沸点100网   教培英才网  中国二手车城  Linux公社  Oracle教程  深圳本地宝  狂人网  0090网址大全  数码比价网  IT英才网

  • PR
COPYRIGHT © 2000-2009 北京尚观科技有限公司 - 北京市海淀区尚观培训学校 - Linux培训及嵌入式培训专家 ALL RIGHTS RESERVED

咨询热线:400-700-0056    800-810-0056
京ICP备09018548号 | Linux就业信息 | 免责声明 | 隐私声明 |