您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > db2重点解析课件6
CS&TInformationCourseBeyondTechnologyDB2东软信息学院计算机科学与技术系CS&TInformationCourse第6章DB2的并发性CS&TInformationCourse目录•6.1事务的概念及特性•6.2多个应用程序并发执行存在的问题•6.3锁的基本概念和功能•6.4隔离级•6.5锁的属性与模式•6.6锁升级CS&TInformationCourse目录•6.7锁等待和锁超时•6.8锁的检测•6.9活锁与死锁•6.10悲观锁与乐观锁CS&TInformationCourse6.1事务的概念及特性•在数据库中,事务(Transaction)就是一系列操作的集合,作为一个整体,这些操作要么都成功,要么都失败。DB2数据库中,有时也把一个事务称为一个工作单元(UnitofWork,简称UOW)。CS&TInformationCourse事务的特性•原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。就好像在化学反应中原子是不可分割的最小单位一样。•一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。当事务正常结束时,数据库处于一个一致性状态,如果在事务执行过程中遇到错误,数据库就不处于一致性状态,此时必须把该事务已经做过的操作取消,使数据库处于该事务执行之前的一致性状态。•隔离性:一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。•持久性:一个事务一旦提交,则它对数据库中数据的改变是永久的,接下来其它操作或故障不应该对其结果有任何影响。CS&TInformationCourse6.2多个应用程序并发执行存在的问题•并发执行的应用程序可能出现四种问题:丢失更新、脏读、不可重复的读、幻像。CS&TInformationCourse丢失更新小王小李查询发现5号车厢34号座位为空查询发现5号车厢34号座位为空购买5号车厢34号座位购买5号车厢34号座位CS&TInformationCourse脏读小刘小张退票(8号车厢20号座位)查询发现8号车厢20号座位为空预定8号车厢20号座位取消退票(Rollback)CS&TInformationCourse不可重复的读公安局售票点第一次查询得到哪些乘客购买了票接受部分乘客的退票,并重新售出和第一次使用相同的条件查询发现购买车票的乘客不同了CS&TInformationCourse幻像小赵售票点第一次查询发现只有一个座位为空有一个乘客退票和第一次使用相同的条件读表发现有两个座位为空CS&TInformationCourse6.3锁的基本概念和功能•所谓锁(Lock),实际上是加在数据库、表空间、表、行或者数据页上的一种标记,用户在对各种数据库对象进行读取或者写入操作时首先要看该对象上的锁是否允许其进行相应操作。从允许用户进行操作的种类,把锁分成两种基本类型:共享锁(SharedLock,简称S锁)和排它锁(ExclusiveLock,简称X锁)。CS&TInformationCourse共享锁•共享锁又称为读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。CS&TInformationCourse排他锁•排他锁又称为写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能再读取和修改A。CS&TInformationCourse锁的兼容性T1T2XS无锁XNoNoYesSNoYesYes无锁YesYesYesCS&TInformationCourse6.4隔离级•数据库管理系统中,一般不需要用户直接设置锁,DB2通过隔离级(Isolation)来控制并发性,选择了合适的隔离级别,就会隐式地在适当的时机给对象加锁,来实现各个级别的封锁协议。CS&TInformationCourse隔离级的种类•DB2有五个隔离级,分别是:–可重复的读(RepeatableRead,简称RR)–读稳定性(ReadStability,简称RS)–游标稳定性(CursorStability,简称CS)–当前已提交(CurrentlyCommitted,简称CC)–未提交的读(UncommittedRead,简称UR)CS&TInformationCourse可重复的读•可重复的读是DB2中最高的隔离级。使用这种隔离级,不仅满足查询条件的所有行被锁定,应用程序在事务中引用的所有行也将被锁定。•如果用户表含有10000行,那么就会锁定这10000行,即使查询结果集只涉及到10行,直到事务结束才会释放这些行。•使用可重复的读隔离级的应用程序无法读取并发应用中的未提交的数据,所以在用户的应用中,不会出现丢失更新、脏读、不可重复的读、幻像。CS&TInformationCourse读稳定性•读稳定性是DB2中次高的隔离级。使用这种隔离级,会锁定满足查询条件的行。•如果用户有一表含有10000行,而查询结果集只涉及到10行,那么只有这10行被锁定。•使用读稳定性的应用程序,由于把作为结果集的行都锁定了,所以不会读未提交的数据。•在同一事务中多次执行同一查询时,能够得到同样的结果,但可能得到额外的幻像行。也就是说,使用读稳定性隔离级,不会出现丢失更新、脏读、不可重复的读,但是有可能出现幻像。CS&TInformationCourse游标稳定性•游标稳定性是DB2中第三个隔离级。使用这种隔离级,对于执行查询的应用程序,只会锁定应用程序当前处理的行,已经处理完毕或者还没有处理的行,不会被锁定,锁一直持续到处理下一行或者事务结束。对于执行更新的行,锁会一直持续到事务结束。•如果用户有一表含有10000行,而查询结果集只涉及到10行,只有一行(应用程序处理的当前行,即游标所在的行,无论这一行是否在结果集中)被锁定,当游标转移到下一行时,前面的锁被释放,当游标移动到最后一行之后,最后一行的锁也被释放。•游标稳定性是DB2中默认的隔离级。•在游标稳定性隔离级中,不会出现丢失更新、脏读现象,但是可能出现不可重复的读和幻像。CS&TInformationCourse当前已提交•当前已提交隔离级是从DB2Cobra开始引入的一个新隔离级,它实际上是游标稳定性隔离级的一个变种。使用这种隔离级能够更有效地避免锁等待和死锁。•在大多数情况下,该隔离级与游标稳定性隔离级相同,区别体现在以下场合:•在游标稳定性隔离级下,一个对数据进行改写操作的应用程序A会阻塞另一个对相同数据进行读取的应用程序B的执行,因为此时A对数据加上了排他锁。而在当前已提交的隔离级下,A不会阻塞B,B仍然能够读取数据,但是读取的是A更新之前的数据(来自于日志),这样一来,就能够提高程序的并发性。CS&TInformationCourse未提交的读•未提交的读是DB2支持的最低级别的隔离级。它允许读取其他应用程序未提交的更新数据。•如果用户有一表含有10000行,而查询结果集只涉及到10行,则所有行都不会加锁。•使用这一隔离级别的应用程序访问到所有与该查询匹配的行,可能会访问到正处于更新过程中的行,而这些更新还没有向数据库提提交。所以可能会访问到错误的数据。•在未提交的读隔离级中,不会出现丢失更新现象,但是可能出现脏读、不可重复的读和幻像。CS&TInformationCourse隔离级的设置方法•对于普通的SQL语句,可以在语句之后加上WITH短语来指定隔离级,如SELECT……WITHRR,表示使用可重复的读隔离级来进行查询,再比如UPDATE……WITHCS,表示使用游标稳定性隔离级来进行数据的更新,在WITH后面可以跟上四种隔离级:RR、RS、CS、UR,分别表示可重复的读、读稳定性、游标稳定性、未提交的读四个隔离级。CS&TInformationCourse隔离级的设置方法(续)•对于动态SQL语句(字段名、表名等为变量的SQL语句),需要通过环境变量进行设置,方法是:SETCURRENTISOLATION={RR,RS,CS,UR}或者SETISOLATION{RR,RS,CS,UR}。CS&TInformationCourse隔离级的设置方法(续)•当进行预编译或者绑定的时候,需要在PREP和BIND命令中加上ISOLATION{RR,RS,CS,UR}选项。•在命令行处理器中,可以通过以下方法更改隔离级:CHANGEISOLATIONTO{RR,RS,CS,UR}。CS&TInformationCourse隔离级的设置方法(续)•在JDBC和SQLJ程序中,可以使用java.sql包中connection接口中的setTransactionIsolation()方法来设置隔离级,参数可以取四种值:TRANSACTION_SERIALIZABLE(可重复的读)、TRANSACTION_REPEATABLE_READ(读稳定性)、TRANSACTION_READ_COMMITTED(游标稳定性)和TRANSACTION_READ_UNCOMMITTED(未提交的读)。CS&TInformationCourse隔离级的设置方法(续)•对于DB2CLI(CallLevelInterface,调用级接口),可以通过修改DB2CLI的配置参数来实现隔离级的设置,方法有两种:•UPDATECLICFGFORSECTION小节名称USINGTXNISOLATION{1,2,4,8},其中1代表未提交的读,2代表游标稳定性,4代表读稳定性,8代表可重复的读。•编辑db2cli.ini文件,设置applTxnIsolation={1,2,4,8}CS&TInformationCourse隔离级的设置方法(续)•对于ODBC或者CLI程序在运行的时候,可以使用带有SQL_ATTR_TXN_ISOLATION属性的SQLSetConnectAttr()函数来设置隔离级。CS&TInformationCourse隔离级的设置方法(续)•对于当前已提交隔离级的设置,在DB2COBRA中,提供了一个新的数据库配置参数:cur_commit,当该参数设置为ON时,表示数据库按照当前已提交隔离级的方式执行应用程序,当该参数设置为DISABLED时,表示该数据库是从以前版本迁移而来的,仍然按照游标稳定性隔离级方式执行应用程序。CS&TInformationCourse6.5锁的属性与模式•锁包含以下属性:–对象(Object):object属性标识了要锁定的数据资源。DB2数据库管理器在需要时锁定数据资源(如数据库、表空间、表和行)。–大小(Size):size属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2数据库管理器可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。–持续时间(Duration):duration属性指定了锁被持有的时间长度。事务的隔离级别通常控制了锁的持续时间。–模式(Mode):mode属性指定了锁的拥有者所允许的访问类型,以及对锁定数据资源的并发用户许可的访问类型。这个属性通常也称为锁状态。CS&TInformationCourse封锁粒度……数据库表空间1表空间p表1表2表3表4表q行11行q1行qn………………行1m………………CS&TInformationCourse意向锁•在数据库系统中,意向锁分三类分别为意向共享锁(IntentShareLock,简称IS锁)、意向排它锁(IntentExclusiveLock,简称IX锁)和共享意向排它锁(ShareIntentExclusiveLock,简称SIX锁)。CS&TInformationCourseIS锁•如果对一个数据对象加IS锁,
本文标题:db2重点解析课件6
链接地址:https://www.777doc.com/doc-5013180 .html