zoukankan      html  css  js  c++  java
  • DB2 9 根蒂(730 查验)认证指南,第 6 局部: 数据并发性(4)

    developerWorks









    锁的任务事理

    在 并发性和隔断级别 一节中,我们看到 DB2 经过利用 把事情相互隔离开来。锁是一种用来将数据资本与单个事情关联起来的机制,其用途是当某个资本与拥有它的事情关联在一同时,节制其他事情若何与该资本截至交互。(我们称与被锁定的资本关联的事情持有拥有 该锁。)DB2 数据库处置轨范用锁来制止事情造访其他事情写入的未提交数据(除非利用了未提交的读隔断级别),并制止其他事情在拥有锁的事情利用限制性隔断级别时对这些行截至更新。一旦获取了锁,在事情住手之前,就不停持有该锁;该事情住手时开释锁,其他事情就可以利用被解锁的数据资本了。

    假如一个事情查验查验造访数据资本的编制与另一个事情所持有的锁不兼容(稍后我们将钻研锁兼容性),则该事情必须守候,直到拥有锁的事情住手为止。这被称为锁守候 事宜。当锁守候事宜爆发时,查验查验造访数据资本的事情所做的只是截至实施,直到拥有锁的事情住手和不兼容的锁被开释为止。









    锁的属性

    全部的锁都有下列基本属性:

    • objectobject 属性标识要锁定的数据资本。DB2 数据库处置轨范在必要时锁天命据资本(如表空间、表和行)。
    • sizesize 属性指定要锁定的数据资本局部的物理年夜小。锁并不总是必须节制整个数据资本。比方,DB2 数据库处置轨范可以让运用轨范独占地节制表中的特定行,而不是让该运用轨范独占地节制整个表。
    • durationduration 属性指定持有锁的工夫长度。事情的隔断级别平常节制着锁的继续工夫。
    • modemode 属性指定允许锁的拥有者实施的造访类型,以及允许并发用户对被锁天命据资本实施的造访类型。这个属性平常称为锁形态









    锁形态

    锁形态确定允许锁的拥有者实施的造访类型,以及允许并发用户对被锁天命据资本实施的造访类型。表 1 说明了可用的锁形态,根据节制递增的按次胪列。

    表 1. 锁形态
    锁形态(形式) 合用工具 形貌
    意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(搜罗未提交数据),但不克不及变动这些数据。在这种形式中,锁的拥有者不获取行级锁;因而,其他并发运用轨范可以读取和变动表中的数据。
    意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不克不及变动这些数据。异样,因为锁的拥有者不获取行级锁;所以,其他并发的运用轨范可以读取和变动表中的数据。(当事情拥有表上的意向共享锁时,就在它所读取的每个行长截至共享锁定。)当事情没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
    下一键共享(Next Key Share,NS) 行 锁拥有者和全部并发的事情都可以读(但不克不及变动)被锁定行中的数据。这种锁用来在利用读不乱性或游标不乱性事情隔断级别读取的数据上替换共享锁。
    共享(Share,S) 表和行 锁拥有者和任何其他并发的事情都可以读(但不克不及变动)被锁定的表或行中的数据。只需表不是利用共享锁锁定的,那么该表中的单个行可以利用共享锁锁定。然则,假如表是用共享锁定的,则锁拥有者不克不及在该表中获取行级的共享锁。假如表或行是用共享锁锁定的,则其他并发事情可以读取数据,但不克不及对它截至变动。
    意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的运用轨范都可以读取和变动被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的运用轨范可以读取和更新被锁定的表。当事情表达更新表中行的意图时,就获取这种锁。
    带意向互斥的共享(Share With Intent Exclusive,SIX) 表 锁拥有者可以读取和变动被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因而,其他并发的运用轨范可以读取但不克不及更新被锁定表中的数据。
    更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上主动得到互斥锁。其他并发的运用轨范可以读取但不克不及更新被锁定表中的数据。
    下一键弱互斥(Next Key Weak Exclusive,NW) 行 锁的拥有者可以读取但不克不及更新被锁定的行。当在非编目表的索引中拔出行时,在表中的下一行上得到这种锁。
    互斥(Exclusive,X) 表和行 锁的拥有者可以读取和变动被锁定的表或行中的数据。假如获取了互斥锁,则只允许利用未提交的读隔断级别的运用轨范造访被锁定的表或行。搪塞用 INSERT、UPDATE 和/或 DELETE 语句利用的数据资本,将获取互斥锁。
    弱互斥(Weak Exclusive,WE) 行 锁的拥有者可以读取和变动被锁定的行。当向非编目表中拔出行时,该行上将得到这种锁。
    超等互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以变动表、删除表、竖立索引或删除索引。当事情查验查验实施上述任何一种利用时,表上就主动得到这种锁。在开释这个锁之前,不允许其他并发事情读取或更新该表。









    若何获取锁

    在年夜少数形态下,DB2 数据库处置轨范在必要锁时隐式地获取它们,因而这些锁在 DB2 数据库处置轨范的节制之下。除了利用未提交读隔断级别的形态外,事情从不用要显式地央求锁。实践上,专注有大要被事情显式地锁定的数据库工具是表。图 6 说明了用何种逻辑确定为所援用的工具获取什么类型的锁。

    图 6. 若何获取锁
    锁

    DB2 数据库处置轨范总是查验查验获取行级锁。然则,可以经过实施特殊编制的 ALTER TABLE 语句来删改这种举动,如下所示:

     
    ALTER TABLE [TableName] LOCKSIZE TABLE 
    


    此中的 TableName 标识一个现有表的称谓,全部事情在造访它时都要获取表级锁。

    也可以经过实施 LOCK TABLE 语句,欺压 DB2 数据库处置轨范为特定事情在表上获取表级锁,如下所示:

     
    LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 
    


    此中的 TableName 标识一个现有表的称谓,搪塞这个表应该获取表级锁(假定其他事情在该表上没有不兼容的锁)。假如在实施这个语句时指定了共享(SHARE)形式,就会得到一个允许其他事情读取(但不克不及变动)存储在表中的数据的表级锁;假如实施时指定了互斥(EXCLUSIVE)形式,就会得到一个不允许其他事情读取或删改存储在表中的数据的表级锁。




    版权声明: 原创作品,允许转载,转载时请务必以超链接编制标明文章 原始因由 、作者信息和本声明。不然将究查法令责任。

  • 相关阅读:
    CentOS7 下更改源
    /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
    Centos7 安装wget命令
    Cannot find a valid baseurl for repo: base/7/x86_6 解决方法
    python 启动新进程执行脚本
    MongoDB数据类型
    pymongo.errors.OperationFailure: Authentication failed.
    python连接MongoDB(有密码有认证)
    Mongodb 创建管理员帐号与普通帐号
    python连接MongoDB(无密码无认证)
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1972943.html
Copyright © 2011-2022 走看看