版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LOGODB2并发控制(锁)质量管理中心引言v在关系数据库(DB2,Oracle,Sybase,Informix和SQL Server)中最小的恢复和交易单位为一个事务(Transactions),事务具有ACID(原子性,一致性,隔离性和永久性)特征。关系数据库为了确保并发用户在存取同一数据库对象时的正确性(即无丢失更新、可重复读、不读脏数据,无幻像读),数据库中引入了并发(锁)机制Company Logo目录目录一、并发控制与锁一、并发控制与锁二、二、 DB2多粒度封锁机制多粒度封锁机制三、三、 DB2隔离级别隔离级别 四、四、 DB2注册变量与注册变量与CC五、五、 DB2锁监控与锁分析
2、锁监控与锁分析LOGO一、并发控制与锁一、并发控制与锁一、一、 并发控制与锁并发控制与锁v事务v并发与数据一致性v三级封锁协议v锁v死锁并发v并发的含义:为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整性,并发控制就是解决这类问题,以保持数据库中数据的一致性,即在任何一个时刻数据库都将以相同的形式给用户提供数据。事务事务的定义n 是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。n 一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可
3、以包括多个事务。事务事务的形式n 事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按照缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION COMMIT ROLLBACK BEGIN TRANSACTION表示事务的开始; COMMIT表示事务的提交,即将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,此时事务正常结束; ROLLBACK表示事务的回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态。 事务事务的特征1.原子性(Ato
4、mic)n 一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”(nothing or all)的原则,即不允许事务部分的完成。n 即使因为故障而使事务未能完成,它执行的部分结果要被取消。事务事务的特征2.一致性(Consistency)n 事务对数据库的作用是数据库从一个一致状态转变到另一个一致状态。例如,银行企业中,“从帐号A转移资金额R到帐号B”是一个典型的事务,这个事务包括两个操作,从帐号A中减去资金额R和在帐号B中增加资金额R,如果只执行其中一个操作,则数据库处于不一致状态,帐务会出现问题。也就是说,两个操作要么全做,要么全不做,否则就不能成为事务。n 可见
5、事务的一致性与原子性是密切相关的。事务事务的特征3.隔离性(Isolation)n 如果多个事务并发地执行,应像各个事务独立执行一样,一个事务的执行不能被其他事务干扰。n 即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。n 并以控制就是为了保证事务间的隔离性。事务事务的特征4.持久性(Durability)n 指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。并发与数据一致性 并发操作与数据的不一致性并发操作与数据的不一致性当同一数据库系统中有多个事务并发运行时,如果不加以适当控制,可能产生数据的不一致性。例1并发取款操作。
6、假设存款余额R=1000元,甲事务T1取走存款100元,乙事务T2取走存款200元,如果正常操作,即甲事务T1执行完毕再执行乙事务T2,存款余额更新后应该是700元。但是如果按照如下顺序操作,则会有不同的结果: 甲事务T1读取存款余额R =1000元; 乙事务T2读取存款余额R =1000元; 甲事务T1取走存款100元,修改存款余额R =R 100=900,把R =900写回到数据库; 乙事务T2取走存款200元,修改存款余额R =R 200=800,把R =800写回到数据库。 并发与数据一致性数据库不一致性主要有以下四种:1.丢失更新(Lost Update)当两个事务T1和T2读入同一
7、数据做修改,并发执行时, T2把T1或T1把T2的修改结果覆盖掉,造成了数据的丢失更新问题,导致数据的不一致。2.脏读(Dirty Read)事务T1更新了数据R,事务T2读取了更新后的数据R,事务T1由于某种原因被撤消,修改无效,数据R恢复原值。事务T2得到的数据与数据库的内容不一致,这种情况称为“脏读”并发与数据一致性3.不可重复的读(Unrepeatable Read) 事务T1读取了数据R,事务T2读取并更新了数据R,当事务T1再读取数据R以进行核对时,得到的两次读取值不一致,这种情况称为“不可重读”。4. 幻象读(Phantom Read)事务 1 读取满足某个搜索条件的一组数据行,
8、而事务 2 插入了与事务 1 搜索条件匹配的新行。如果事务 1 再次执行产生原先行集的查询,则会检索到不同的行集。并发与数据一致性n 产生上述四类数据不一致性的主要原因就是并发操作破坏了事务的隔离性。n 并发控制就是要求DBMS提供并发控制功能以正确的方式高度并发事务,避免并发事务之间的相互干扰造成数据的不一致性,保证数据库的完整性。锁 锁定义锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集、以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。 锁类型1排它锁(Exclusive Lock) 排它锁又称写锁,简称为X锁,其采用的原理是禁止并发操作。 当事
9、务T对某个数据对象R实现X封锁后,其他事务要等T解除X封锁以后,才能对R进行封锁。这就保证了其他事务在T释放R上的锁之前,不能再对R进行操作。2共享锁(Share Lock) 共享锁又称读锁,,简称为S锁,其采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。 当事务T对某个数据对象R实现S封锁后,其他事务只能对R加S锁,而不能加X锁,直到T释放R上的S锁。 这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。三级封锁协议1.一级封锁协议事务T在修改数据对象之前必须对其加X锁,直到事务结束。一级封锁协议可以防止丢失更新,并保证事务T是可恢复的。
10、但是不能防止脏读、不可重复的读和幻象读。2.二级封锁协议在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后立即释放S锁。二级封锁协议可以防止丢失更新、脏读,但是不能防止不可重复的读和幻象读。三级封锁协议1.三级封锁协议在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。三级封锁协议可以防止丢失更新、脏读、不可重复的读和幻象读。锁 锁粒度n 根据对数据的不同处理,封锁的对象可以是这样一些逻辑单元:字段、记录、表、数据库等。n 封锁粒度与系统的并发度和并发控制的开销密切相关。封锁粒度越小,系统中能够被封锁的
11、对象就越多,并发度越高,但封锁机构复杂,系统开销也就越大。相反,封锁粒度越大,系统中能够被封锁的对象就越少,并发度越小,封锁机构简单,相应系统开销也就越小。因此,在实际应用中,选择封锁粒度时应同时考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡,以求得最优的效果。n 由于同时封锁一个记录的概率很小,一般数据库系统都在记录级上进行封锁,以获得更高的并发度。死锁死锁在同时处于等待状态的两个或多个事务中,其中的每一个在它能够进行之前,都等待着对方释放自己想要的锁,这种状态称为死锁。时间事务T1事务T2t0LOCK R1 t1 LOCK R2t2 t3LOCK R2 t4WAIT t5WAIT
12、LOCK R1t6WAITWAITt7WAITWAITLOGO二、二、DB2多粒度封锁机制多粒度封锁机制二、DB2多粒度锁机制v锁的对象v锁的策略v表锁的模式v行锁的模式v表锁的相容矩阵v行锁的相容矩阵vSQL语句与锁v锁升级锁的对象锁的对象DB2支持对表空间、表、行和索引加锁(大型机上的数据库还可以支持对数据页加锁)来保证数据库的并发完整性。不过在考虑用户应用程序的并发性的问题上,通常并不检查用于表空间和索引的锁。该类问题分析的焦点在于表锁和行锁。锁的策略锁的策略DB2可以只对表进行加锁,也可以对表和表中的行进行加锁。如果只对表进行加锁,则表中所有的行都受到同等程度的影响。如果加锁的范围针对
13、于表及下属的行,则在对表加锁后,相应的数据行上还要加锁。究竟应用程序是对表加行锁还是同时加表锁和行锁,是由应用程序执行的命令和系统的隔离级别确定。表锁的模式表锁的模式nIS、IX、SIX方式用于表一级并需要行锁配合,他们可以阻止其他应用程序对该表加上排它锁。 如果一个应用程序获得某表的IS锁,该应用程序可获得某一行上的S锁,用于只读操作,同时其他应用程序也可以读取该行,或是对表中的其他行进行更改。 如果一个应用程序获得某表的IX锁,该应用程序可获得某一行上的X锁,用于更改操作,同时其他应用程序可以读取或更改表中的其他行。 如果一个应用程序获得某表的SIX锁,该应用程序可以获得某一行上的X锁,用
14、于更改操作,同时其他应用程序只能对表中其他行进行只读操作。 nS、U、X和Z方式用于表一级,但并不需要行锁配合,是比较严格的表加锁策略。 如果一个应用程序得到某表的S锁。该应用程序可以读表中的任何数据。同时它允许其他应用程序获得该表上的只读请求锁。如果有应用程序需要更改读该表上的数据,必须等S锁被释放。 如果一个应用程序得到某表的U锁,该应用程序可以读表中的任何数据,并最终可以通过获得表上的X锁来得到对表中任何数据的修改权。其他应用程序只能读取该表中的数据。U锁与S锁的区别主要在于更改的意图上。U锁的设计主要是为了避免两个应用程序在拥有S锁的情况下同时申请X锁而造成死锁的。 如果一个应用程序得
15、到某表上的X锁,该应用程序可以读或修改表中的任何数据。其他应用程序不能对该表进行读或者更改操作。 如果一个应用程序得到某表上的Z锁,该应用程序可以读或修改表中的任何数据。其他应用程序,包括未提交读程序都不能对该表进行读或者更改操作。 nIN锁用于表上以允许未提交读这一概念。行锁的模式DB2锁的兼容性表锁的相容矩阵常见的表锁:IS/IXDB2锁的兼容性行锁的相容矩阵常见的行锁:NS/XSQL语句与锁 【假设缺省的隔离级别为CS】SQL语句表锁模式行锁模式Select id from table_name where id = ISNSInsert into table_nameIXX(W)Upd
16、ate table_name where id = IXXDelete from table_name where id = IXXAlter table t1 add column id intZDrop table t1ZCreate table t1Z锁升级锁升级数据库管理器可以自动将锁定从行级别升级为表级别。每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级这一功能。锁升级是通过对表加上非意图性的表锁,同时释放行锁来减少锁的数目,从而达到减少锁需要的内存开销的目的的。锁升级由数据库管理器自动完成,数据库的配置参数锁列表页面数(LOCKLIST)和应用程序占
17、有百分比(MAXLOCKS)直接影响锁升级的处理。锁升级是有可能失败的。LOCKLIST和MAXLOCKS LOCKLIST配置参数的计算方法如下(操作系统为64位平台):n (1) 计算锁列表大小的下限:(512 * 56 * MAXAPPLS)/4096其中,512是每个应用程序平均所含锁数量的估计值,56是对象(已有一把锁)上每把锁所需的字节数。n (2) 计算锁列表大小的上限:(512 * 112 * MAXAPPLS)/4096其中,112是某个对象上第一把锁所需的字节数。n (3) 对于您的数据,估计可能具有的并发数,并根据您的预计为锁列表选择一个初始值,该值位于您计算出的上限和下
18、限之间。 MAXLOCKS配置参数的计算方法如下:MAXLOCKS = 100 * (512锁/应用程序 * 56字节/锁 * 2)/(LOCKLIST * 4096字节)LOGO三、三、 DB2隔离级别隔离级别三、DB2隔离级别v可重复读(Repeatable Read) v读稳定性(Read Stability) v游标稳定性(Cursor Stability) v未提交读(Uncommitted Read)v定义的隔离级别v设置隔离级别v监视 DB2 中的隔离级别隔离级别 可重复读(Repeatable Read)事务执行期间会锁定该事务以任何方式引用的所有行。在事务存在期间,不允许其他
19、事务执行会影响这个事务正在访问的任何行的插入、更新或删除操作。为了确保这种行为不会发生,锁定该事务所引用的每一行- 而不是仅锁定被实际检索或修改的那些行。因此,如果一个事务扫描了1000行,但只检索10行,那么它所扫描的1000行(而不仅是被检索的10行)都会被锁定。 在使用可重复读隔离级别时,一个事务中所有被读取过的表(行,跟有无唯一索引有关)上都会被加上S锁,直到该事务被提交或回滚,行上的锁才会被释放。隔离级别 读稳定性(Read Stability) 事务执行期间会锁定只是锁定事务实际检索和修改的行如果一个事务扫描了1000行,但只检索10行,则只有被检索的10行(而不是所扫描的1000
20、行)被锁定。在这个事务存在期间,其他事务不能执行那些会影响这个事务检索到的行集的更新或删除操作;但是其他事务可以执行插入操作。如果插入的行与第一个事务的查询的选择条件匹配,那么这些行可能作为幻像出现在后续产生的结果数据集中。在使用读稳定性隔离级别时,一个事务中所有被读取过的行上都会被加上NS锁,直到该事务被提交或回滚,行上的锁才会被释放。读稳定性隔离级别可以防止脏读和不可重复读,但是可能出现幻像读。隔离级别 游标稳定性(CS-Cursor Stability) 只锁定事务声明并打开的游标当前所引用的行,是DB2默认的隔离级别。当使用游标稳定性隔离级别的事务通过游标从表中检索行时,其他事务不能更
21、新或删除游标所引用的行。但是,如果被锁定的行本身不是用索引访问的,那么其他事务可以将新的行添加到表中,以及对被锁定行前后的行进行更新和/或删除操作。所获取的锁一直有效,直到游标重定位或事务终止为止(如果游标重定位,原来行上的锁就被释放,并获得游标现在所引用行上的锁)。此外,如果事务修改了它检索到的任何行,那么在事务终止之前,其他事务不能更新或删除该行,即使游标不再位于被修改的行。在使用游标稳定性隔离级别时,一个事务的结果集中只有正在被读取的那一行(游标指向的行)会被加上NS锁,其他未被处理的行上不被加锁。它可以防止脏读,但有可能出现不可重复读和幻像读。建议在需要最大并行性,但只看到其他应用程序
22、中已落实行的情况下才使用。隔离级别 未提交读(UR-Uncommitted Read) 未提交读隔离级别是最不严格的隔离级别。实际上,在使用这个隔离级别时,仅当另一个事务试图删除或更改被检索的行所在的表时,才会锁定该检索的行。因为在使用这种隔离级别时,行通常保持未锁定状态,所以脏读、不可重复读和幻像读都可能会发生。因此,未提交读隔离级别通常用于那些访问只读表和视图的事务,以及某些执行SELECT语句的事务(只要其他事务的未提交数据对这些语句没有负面效果)。隔离级别 DB2隔离级别与现象 隔离级别脏读不可重复的读幻象读可重复读(RR)不可能不可能不可能读稳定性(RS)不可能不可能可能游标稳定性(
23、CS)不可能可能可能未落实的读(UR)可能可能可能定义的级别n 第一个级别是驱动程序级别,这是一组驱动程序函数和方法。这个隔离级别是在驱动程序及其库载入的时候定义的。 n 下一个级别是连接级别。无论何时,只要分配了连接句柄,就会定义一个隔离级别。这种隔离级别将在连接打开时有效。 n DB2 中的下一个级别是包级别。如果使用静态 SQL,则将创建一个包,并可绑定特定的隔离级别。这种隔离级别将在包得到描述时有效。 n 最后一个级别是语句级别。无论何时,只要分配了一个语句句柄,即可定义一个隔离级别。这种隔离级别将在语句执行时有效。 设置隔离级别在 DB2 中,隔离级别始终在客户端定义。不存在可以在服
24、务器端定义的数据库默认隔离级别。API级别描述SQL驱动程序在当前会话的 DB2 命令行(db2cmd/shell)中db2 SET CURRENT ISOLATION isolevel 例如:db2 SET CURRENT ISOLATION RSCLI连接在 CLI 应用程序中设置 SQL_ATTR_TXN_ISOLATION 属性JDBC连接通过 setTransactionIsolation 方法setTransactionIsolation(isolevel_constant) 例如:con.setTransactionIsolation( Connection.TRANSACTIO
25、N_READ_UNCOMMITTED )ODBC驱动程序通过 ODBC 设置在 db2cli.ini 文件中使用 TXNISOLATION 关键字例如:db2 update cli cfg at user level for section TESTDB using TXNISOLATION 4SQLJ包对于 SQLJ,使用 SQLJ 配置文件绑定选项db2sqljbind -url jdbc:db2:/host:port/db -bindoptions ISOLATION isolevel serialized-profile-name例如:db2sqljbind -url jdbc:db2
26、:/localhost:50001/TESTDB -bindoptions ISOLATION RS $_SJProfile0静态 SQL包在静态 SQL 中,使用绑定选项db2 BIND bindfile ISOLATION isolevel例如:db2 BIND client11.bnd ISOLATION RSSQL 过程包在 SQL 过程中,使用特殊注册表参数db2set DB2_SQLROUTINE_PREPOPTS=ISOLATION isolevel 例如:db2set DB2_SQLROUTINE_PREPOPTS=ISOLATION UR设置隔离级别隔离级别属性值:CLIJD
27、BC 4 类驱动程序ODBC、嵌入式 SQL、Cobol属性TXNISOLATIONsetTransactionIsolation 方法SQL_ATTR_TXN_ISOLATIONUR1Connection.TRANSACTION_READ_UNCOMMITTEDSQL_TXN_READ_UNCOMMITTEDCS2Connection.TRANSACTION_READ_COMMITTEDSQL_TXN_READ_COMMITTEDRS4Connection.TRANSACTION_READ_COMMITTEDSQL_TXN_REPEATABLE_READRR8Connection.TRANS
28、ACTION_SERIALIZABLESQL_TXN_SERIALIZABLE设置隔离级别 ibm-web-ext.xmi SQLSQL语句表锁模式行锁模式SELECT * FROM LOCK_MONITOR FOR READ ONLY WITH rrS无SELECT * FROM LOCK_MONITOR FOR READ ONLY WITH rsISNSSELECT * FROM LOCK_MONITOR FOR READ ONLY WITH cs无无SELECT * FROM LOCK_MONITOR FOR READ ONLY WITH ur无无SELECT * FROM LOCK_M
29、ONITOR FOR UPDATE WITH rrU无SELECT * FROM LOCK_MONITOR FOR UPDATE WITH rsIXUSELECT * FROM LOCK_MONITOR FOR UPDATE WITH csIXUSELECT * FROM LOCK_MONITOR FOR UPDATE WITH urIXU监视DB2中的隔离级别尽管可以在不同的级别上设置隔离级别,但有效的隔离级别只有一个。在级别层次结构中,最后定义的级别总是有效隔离级别。换句话说,语句隔离级别会覆盖包隔离级别,包隔离级别覆盖连接隔离级别,连接隔离级别覆盖驱动程序隔离级别。监视DB2中的隔离级别
30、可用工具:工具报告的级别关键字值/字段示例动态 sql 快照(或者 db2pd -dyn)。语句级别语句文本子句 WITH isolevelWITH UR应用程序快照连接级别包名称SYSSHxyySYSSH300 (3=RS)语句的事件监视器连接级别包名称SYSSHxyySYSSH300 (3=RS)动态缓存(db2pd -dyn)连接级别动态 SQL 环境StmtUID EnvID Iso11 1 RR有效隔离级别(db2pd -act)语句级别活动语句列表:StmtUID EffISO11 0工作负载管理器(WLM)功能和事件监视器语句级别STMT_ISOLATION0.41 (=UR)监
31、视DB2中的隔离级别隔离级别编码:N/A 表示未指定,NC 表示未提交工具01234包名称NCURCSRSRRdb2pd EffIsoRRCSURRSEFFECTIVE_ISOLATION (WLM_GET_ACTIVITY_DETAILS)RRCSURRSSTMT_ISOLATIONNONEURCSRSRRLOGO四、四、 DB2注册变量与注册变量与CC四、四、 DB2注册变量与注册变量与CCvDB2_EVALUNCOMMITTEDvDB2_SKIPDELETEDvDB2_SKIPINSERTED DB2注册变量是9.5之前版本用来降低锁消耗,提高并行度的三个环境变量。注册变量 DB2_EV
32、ALUNCOMMITTED DB2_EVALUNCOMMITTED变量影响DB2在游标稳定性(CS)和读稳定性(RS)隔离级别下的行锁机制。当你启用该功能时,DB2可以对未提交的插入(INSERT)或者更新(UPDATE)数据进行谓词判断,如果未提交数据不符合该条语句的谓词(且该谓词非索引)判断条件,DB2将不对未提交数据加锁,这样避免了因为要对未提交数据加锁而引起的锁等待状态,提高了应用程序访问的并发性。同时DB2会无条件(不管是否满足谓词条件)进行表扫描时忽略删除的行数据(不管是否提交)。注:谓词字段上面未建索引情况下,未启用此功能时,在未提交数据不符合查询语句的谓词判断条件时,仍会进行锁
33、等待。如果有索引,则不进行锁等待。注册变量 DB2_EVALUNCOMMITTED 启用此功能后,当未提交的数据不符合查询语句的谓词判断条件,且该谓词上面未建索引的情况下,DB2将不会再进行锁等待,而返回正确的查询结果。注册变量 DB2_SKIPDELETED 变量DB2_SKIPDELETED(被启用时=ON),将允许使用CS或RS隔离级别的语句,在索引扫描期间无条件地跳过被删除的键,而在表访问期间则无条件地跳过被删除的行。注:启用该参数等同于使用UR隔离级别,需要结合实际业务逻辑使用。注册变量 DB2_SKIPINSERTED 如果设置DB2_SKIPINSERTED=ON,DB2将把未提
34、交的INSERT(只对于CS和RS 隔离级别)看作它们还没有被插入。该特性提高了并发性,同时又不牺牲隔离语义。DB2 为扫描器实现了这种能力,通过锁属性和锁请求的反馈,使其忽略未提交的插入行,而不是等待。注:启用该参数等同于使用UR隔离级别,需要结合实际业务逻辑使用。注册变量原始启用DB2_EVALUNCOMMITTED启用DB2_SKIPINSERTED启用DB2_SKIPDELETED满足谓词判断条件不满足满足不满足满足不满足满足不满足Insert锁等待谓词有索引,则不锁等待;谓词无索引,则锁等待锁等待不锁等待不锁等待不锁等待NANAUpdate锁等待谓词有索引,则不锁等待;谓词无索引,则
35、锁等待锁等待不锁等待NANANANADelete锁等待谓词有索引,则不锁等待;谓词无索引,则锁等待谓词有索引,则锁等待,谓词无索引,则不锁等待不锁等待NANA不锁等待不锁等待备注:不锁等待时采用忽略的方式,即当成不存在此数据的情况。注册变量设置注册变量db2set db2set DB2_EVALUNCOMMITTED=ON -i db2set DB2_SKIPINSERTED=ON -idb2set DB2_SKIPDELETED=ON -iCUR_COMMIT currently committed semanticsemp 表有 5 条记录,其中第二行和第四行插入操作已经完成,描述该插入操
36、作的日志记录已经存储在使用 TSM 归档的带库中,具体如图 1 中右下方红色部分所示;第三行正处于更新状态(还没落实),记录该行的日志记录处于磁盘中的活动日志文件中,该日志记录描述了第三行的首次更改情况,具体如图 1 右边中间黄色部分所示;第五行正处于插入状态(还没落实),记录该行的日志记录处于磁盘中的活动日志文件中,该日志记录描述了第五行的首次插入情况,具体如图 1 右边中间黄色部分所示;第一行正处于删除状态(还没落实),记录该行的日志记录处于日志缓冲区中,该日志记录描述了第一行的首次更改情况,具体如图 1 右边上方绿色部分所示;CUR_COMMIT currently committed
37、semantics图 1 中间的 Locklist 部分表示锁管理器,在锁管理器中描述了第一行、第三行、第五行处于 X 锁状态,与这些行对应的日志记录也在该锁管理器中,这就是 DB2 V9.7 对行级锁定新增的反馈机制,来标识哪些“日志记录”描述了该行的首次修改,当发生一个锁冲突时锁管理器将使用该反馈机制直接返回这些日志记录编号,如黑色箭头所示。当其他应用试图读取第一行或第三行时,将会直接从日志缓冲区或日志文件中返回该行的“已落实”版本数据。而对未提交的第五行,扫描将直接忽略或跳过该行。 ORACLE SNAPSHOT ORACLE Snapshot 隔离级别情况下的的堵塞情况 DB2 V9.
38、7 之前的版本中使用 CS 隔离级别情况下的堵塞情况先出现的工作负载 后出现的工作负载读工作负载写工作负载读工作负载否(不堵塞)否(不堵塞)写工作负载否(不堵塞)是(堵塞)先出现的工作负载 后出现的工作负载读工作负载写工作负载读工作负载否(不堵塞)可能写工作负载是(堵塞)是(堵塞)ORACLE SNAPSHOT DB2 V9.7 中启用“当前已落实”的 CS 隔离级别情况下的堵塞情况先出现的工作负载 后出现的工作负载读工作负载写工作负载读工作负载否(不堵塞)否(不堵塞)写工作负载否(不堵塞)是(堵塞)DB2 V9.7 CUR COMMIT与环境变量启用三个环境变量CUR COMMIT满足谓词判
39、断条件不满足满足谓词判断条件不满足Insert不锁等待(忽略)不锁等待;不锁等待(忽略)不锁等待;Update锁等待不锁等待不锁等待(返回更新前的值)不锁等待;Delete不锁等待(忽略)不锁等待;不锁等待(返回删除前的值)不锁等待;备注:LOGO五、五、 DB2锁监控与锁分析锁监控与锁分析五、DB2锁监控与死锁定位v锁相关参数vDB2 锁事件监控vDB2 9.7锁监控v常见死锁场景锁相关参数LOCKLIST锁定列表的最大存储量(4KB),默认自动调整MAXLOCKS每个应用程序的锁定百分比列表,默认自动调整DLCHKTIME检查死锁的时间间隔,默认10秒LOCKTIMEOUT锁定超时,默认无
40、限等待,建议1015秒DB2 锁事件监控 DB2 锁事件监控-连接数据库db2 connect to CELL-创建dlmon事件监控db2 create event monitor dlmon for tables, deadlocks with details write to file /home/db2inst1/dlmon-创建事件监控记录目录mkdir /home/db2inst/dlmon-开启事件监控db2 set event monitor dlmon state 1-待监控完毕后,执行以下命令以生成分析文件db2evmon -path /home/db2inst1/dlmo
41、n /home/db2inst1/dlmon/dllog1.txt -停止dlmon事件监控db2 set event monitor dlmon state 0-删除dlmon事件监控db2 drop event monitor dlmon”DB2 锁事件监控DB2 锁事件分析Deadlocked Connection . Deadlock ID: 1 . Appl Id: 10.188.180.234.17257.1212260744 .(这两个Appl 互为死锁) Appl Id of connection holding the lock: 10.188.180.234.9577.12
42、122607442 . Table of lock waited on : AW_INVENTORY .(发生死锁的表) Type of lock: Row (请求级别为行锁) Mode of lock: NS - Share (and Next Key Share) (当前拥有NS锁) Mode application requested on lock: X - Exclusive (请求X锁) . Deadlocked Statement: .(产生X锁的SQL语句) Text : update AW_INVENTORY set SEND_STATE=?, DATA_STATE=?, M
43、ODIFY_TIME=?, SEND_TIME=?, PACKAGE_TIME=?, LAST_TIME=?, ORGGB_CD=?, ORGGB_NAME=?, ORG_CD=?, ORG_NAME=?, COUNTRY_CD=?, COUNTRY_NAME=?, LEAF_YEAR=?, LEAF_ORIGIN_CD=?, LEAF_ORIGIN_NAME=?, LEAF_TYPE_CD=?, LEAF_TYPE_NAME=?, LEAF_FORM_CD=?, LEAF_FORM_NAME=?, LEAF_VARIETY_CD=?, LEAF_VARIETY_NAME=?, STOCK_A
44、REA_CD=?, STOCK_AREA_NAME=?, SUB_STORAGE_ID=?, SUB_STORAGE_NAME=?, LEAF_RANK_CD=?, LEAF_RANK_NAME=?, LEAF_LEVEL_CD=?, LEAF_LEVEL_NAME=?, LEAF_LEVEL_NO=?, QUANTITY=?, WEIGHT=?, CONFISCATE_FLAG=?, MIN_ORIGIN_CD=?, MIN_ORIGIN_NAME=?, BUY_ORG_CD=?, BUY_ORG_NAME=?, STORAGE_ID=?, STORAGE_NAME=?, STORAGE_S
45、ORT=?, IN_DATE=?, IF_BASE=?, IF_STOCK=?, BASE_CD=?, BASE_NAME=?, RESERVED=?, RESERVED3=? where INVENTORY_ID=? List of Locks: Table Name : AW_INVENTORY Mode : X - Exclusive Current Mode : NS - Share (and Next Key Share) .(在AW_INVENTORY表上有一个NS锁)DB2 9.7锁监控1. 删除默认死锁事件监视SET EVENT MONITOR DB2DETAILDEADLOC
46、K state 0 DROP EVENT MONITOR DB2DETAILDEADLOCK 2. 与锁事件监控相关的配置参数MON_LOCKWAITMON_LOCKTIMEOUTMON_DEADLOCKMON_LW_THRESH3. 修改锁事件监控配置参数 (MON_LW_THRESH以微妙为单位)db2 update db cfg using MON_LOCKTIMEOUT HIST_AND_VALUES MON_DEADLOCK HIST_AND_VALUES MON_LOCKWAIT HIST_AND_VALUES MON_LW_THRESH 8000000 DB2 9.7锁监控4. 创建锁事件监视(可以监视锁超时和死锁)db2 create event monitor lockdead for locking WRITE TO UNFORMATTED EVENT TABLE5. 启动停止监听事件db2 set event monitor lockdead state 1db2 set event monitor lockdead state 06. 获取锁等待事件数据call EVMON_FORMAT_UE_TO_TABLES ( LOCKING, NULL, NULL, NULL, NULL, NULL, RECREATE_FORCE, -1, SELEC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园心理健康合同:校园心理健康服务承包协议
- 新疆维吾尔自治区劳动合同范本样本
- 山林承包合同使用指南
- 2024年范文生态园土地承包合同
- 2024试析《物业服务合同》的解除或终止问题
- 2024小吃加盟合同范本
- 物业管理服务协议参考样本
- 个人建房施工合同范本
- 2024广告设计类合同范本
- 解除版权买卖合同协议
- 期刊编辑的学术期刊编辑规范考核试卷
- T-CCSAS014-2022《化工企业承包商安全管理指南》
- 电梯安全总监和安全员的任命文件
- SL-T+62-2020水工建筑物水泥灌浆施工技术规范
- 2024年安徽省普通高中学业水平选择性考试 历史试卷
- 电子商务师职业技能等级证书培训方案
- JBT 14615-2024 内燃机 活塞运动组件 清洁度限值及测定方法(正式版)
- DL5009.2-2013电力建设安全工作规程第2部分:电力线路
- 理智与情感:爱情的心理文化之旅智慧树知到期末考试答案章节答案2024年昆明理工大学
- GA/T 2097-2023执法办案管理场所信息应用技术要求
- GB 20052-2024电力变压器能效限定值及能效等级
评论
0/150
提交评论