DB2数据库锁机制及问题.ppt

上传人:小飞机 文档编号:5427000 上传时间:2023-07-05 格式:PPT 页数:39 大小:331.49KB
返回 下载 相关 举报
DB2数据库锁机制及问题.ppt_第1页
第1页 / 共39页
DB2数据库锁机制及问题.ppt_第2页
第2页 / 共39页
DB2数据库锁机制及问题.ppt_第3页
第3页 / 共39页
DB2数据库锁机制及问题.ppt_第4页
第4页 / 共39页
DB2数据库锁机制及问题.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《DB2数据库锁机制及问题.ppt》由会员分享,可在线阅读,更多相关《DB2数据库锁机制及问题.ppt(39页珍藏版)》请在三一办公上搜索。

1、,Welcome to HUAWEI Technologiespresentation,DB2数据库锁机制简介及问题诊断,电子支付研究院清算应用服务室牛天耘 2007年07月,DB2锁策略简介 锁表原因分析和场景模拟定位锁问题的常见DB2命令相关编程建议,1、DB2锁策略简介,锁是数据库为了控制并发数据的完整性而引入的机制。锁定的对象锁定的模式(强度)锁定的长度,锁定的对象,数据库表格空间表记录,锁定的模式(一),基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的

2、锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。,锁定的模式(二)-DB2数据库表锁的模式,锁定的模式(三)-DB2数据库行锁的模式,锁定的模式(四)-锁的兼容性,锁定的模式(五)-DB2数据库表锁的兼容性,锁定的模式(六)-DB2数据库行锁的兼容性,锁定的模式(七)-各SQL语句产生表锁的情况(假设缺省的隔离级别为CS)与实际情况可能有出入,仅供参考,锁定的长度(一)-隔离级别(ISOLATION

3、LEVEL),写锁定(如X、W、NW、Z等)持续到事务结束(提交或是回滚)时释放读锁定(如S、NS、U等)Repeatable Read(RR)所有的读锁定在事务结束时才释放Read Stability(RS)在符合条件的记录上所读取得的读锁定,会持续到事务结束时才释放。而不符合条件的记录上的读锁定,则在读取下一笔记录时就立刻释放Cursor Stability(CS)目前所读取的记录上的读锁定,会在读取下一笔记录时就立刻释放Uncommitted Read(UR)在读取记录时,不会取得读锁定。也就是一般所说的脏读。缺省模式为CS,锁定的长度(二),2、锁表原因分析和场景模拟,锁超时死锁锁升级

4、-911实例分析,锁超时,锁等待当某应用程序已经取得一个对象上的锁定(例如X锁),而第2个程序企图取得同一对象上无法并存的锁定(例如S锁定)时,则第2个程序的SQL指令就无法执行下去,发生锁定等待。锁超时LOCKTIMEOUT参数db cfg中,指定一个应用程序被允许的锁等待的时间,单位是秒。缺省情况下,LOCKTIMEOUT是-1,意味着锁等待时间无限期。建议修改。当应用程序等待时间超过LOCKTIMEOUT时间,仍未获得锁,则数据库返回-911错误,reason code为68。,死锁(一),死锁死锁是因为两个并发的进程或者线程同时各自占有一个资源上的锁,又需要占有对方资源上的锁,但又都各

5、不相让造成的。相关参数DLCHKTIME参数DB2检查死锁的间隔时间,单位是毫秒每隔DLCHKTIME这么长的时间,数据库死锁检查器就会检查有无死锁存在。如有死锁,会选择回滚其中的某一个事务,让另外一个事务完成交易。回滚的事务返回返回-911错误,reason code为2。,死锁(二)-示例,死锁(三)-示例续,锁升级(一),锁升级每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级的功能,将行锁升级为表锁,从而达到减少锁的数量,降低锁的内存开销的目的。相关参数LOCKLIST参数在一个数据库全局内存中用于锁存储的内存。单位为页(4K)MAXLOCKS参数一个应用

6、程序允许得到的锁占用的内存所占locklist大小的百分比。,锁升级(二),锁升级的触发某个应用程序请求的锁所占用的内存空间超出了maxlocks*locklist的乘积大小。这时,数据库管理器将试图通过为提出锁请求的应用程序申请表锁,并释放行锁来节省空间。在一个数据库中已被加上的全部锁所占的内存空间超出了locklist定义的大小。这时,数据库管理器也将试图通过为提出锁请求的应用程序申请表锁,并释放行锁来节省空间。锁升级的后果增加可用的锁的内存空间降低程序的并发性锁住整个表,容易造成死锁,或进一步造成其他事务发生锁等待的情况。,-911实例分析(一),出现-911错时,首先排除程序逻辑中的死

7、锁相比死锁,锁等待导致的锁超时情况更为常见,-911实例分析(二),-上图情况,文件生成插入的记录,和文件装载读取的记录,并无交集,因此从代码逻辑上,无法直观判断出存在资源等待的情况。也可以排除死锁。,-911实例分析(三),从数据库锁操作的角度来分析:BAT_AflFileGene模块往文件信息视图中插入记录,新增记录被加了X锁。在事务提交前,这个X锁一直不会释放。此时BAT_FileCheck轮询文件信息视图,进行declare操作。首先会对该表加IS(Intent Share)锁,然后开始读取表格中记录读取每一条记录前,先要取得该记录的NS(Next Key)锁,取得NS锁后,才能比对该

8、笔记录是否符合where条件,进行后继操作。当读到 BAT_AflFileGene新产生的那条记录时,试图获得该记录的NS锁,但该记录上已被BAT_AflFileGene模块加上X锁。这时BAT_FileCheck只能进行锁等待。当超过数据库设置的锁超时时间,BAT_AflFileGene仍未执行到,则BAT_FileCheck就会报-911错。,3、定位锁问题的常见DB2命令,查看和锁相关的数据库配置参数查看当前并发应用 查看快照信息 查看执行策略,查看和锁相关的数据库配置参数,查看当前并发应用,查看快照信息(一),查看快照信息(二),续P22的实例,分析快照。先看BAT_AflFileGe

9、ne模块状态,Application handle=1068Application ID Sequence number=0001Application name=BAT_FileCheckCONNECT Authorization ID=ZDZP_DBApplication status=Lock-waitStatus change time=Not CollectedApplication code page=1386Locks held=6Total wait time(ms)=16425 Subsection waiting for lock=0 ID of agent holding

10、 lock=189 Lock name=0 x00020020000000040000000052 Lock attributes=0 x00000000 Release flags=0 x00000001 Lock object type=Row Lock mode=Exclusive Lock(X)Lock mode requested=Next Key Share(NS)Name of tablespace holding lock=USERSPACE1 Schema of table holding lock=ZDZP_DB Name of table holding lock=TBL

11、_BKE_FILE_INF4 Lock wait start timestamp=04-19-2007 18:06:01.800533,查看快照信息(三),再看BAT_FileCheck模块状态,Application handle=189Sequence number=0001Application name=BAT_AflFileGeneCONNECT Authorization ID=ZDZP_DBApplication status=UOW WaitingStatus change time=Not CollectedApplication code page=1386Locks he

12、ld=29Total wait time(ms)=0List Of Locks Lock Name=0 x00020020000000040000000052 Lock Attributes=0 x00000000 Release Flags=0 x40000000 Lock Count=18 Hold Count=0 Lock Object Name=4 Object Type=Row Tablespace Name=USERSPACE1 Table Schema=ZDZP_DB Table Name=TBL_BKE_FILE_INF4 Mode=X,查看执行策略(一),查看DB2的最优化处

13、理器(Optimizer)在选择SQL指令的执行计划时,会采用何种锁定方式。db2expln例如:,db2expln-d-u(-c-p-version/-f/-q)-g o,db2expln-d bkedb-u bat_emv bat_emv-c bat_emv-p BAT1018-g-o tyniu.out,查看执行策略(二),|Access Table Name=BAT_EMV.TBL_BKE_FILE_INF4 ID=2,37|Index Scan:Name=BAT_EMV.IND_BKE_FI4_2 ID=3|Regular Index(Not Clustered)|Index Col

14、umns:|1:FILE_DT(Ascending)|2:INS_ID_CD(Ascending)|3:FILE_TP_INDEX(Ascending)|4:FILE_TFR_DIR(Ascending)|5:FILE_PROC_ST(Ascending)|#Columns=15|#Key Columns=0|Start Key:Beginning of Index|Stop Key:End of Index|Data Prefetch:None|Index Prefetch:None|Lock Intents|Table:Intent Share|Row:Next Key Share|Sar

15、gable Index Predicate(s)|#Predicates=2UNION,4、相关编程建议,编程建议(一),尽量缩短事务长度在数据一致性逻辑许可情况下,尽快提交事务,不要在事务中加入不必要的执行时间过长的代码,比如大的代码循环和远程调用,或者一些没有用处的SELECT语句。否则在提交前,锁一直得不到释放,容易产生锁超时或锁升级的情况。例如P22的实例,编程建议(二),使用正确的隔离级别系统缺省的ISOLATION LEVEL为CS。程序员可以在BIND或PREP时指定该程序缺省的ISOLATION LEVEL,也可以在每个SQL语句中指定相应的ISOLATION LEVEL。UR

16、这一ISOLATION LEVEL无需任何读锁,因此它的效率最高。我们建议,如果业务允许的话,尽可能多用这种ISOLATION LEVEL。,编程建议(三),避免逻辑中的死锁如果多个应用程序访问同一资源,最好以相同的次序访问。这样,即使前一个访问资源的应用程序会延迟其他应用程序的访问,也不会导致死锁的发生,编程建议(四),创建和使用合理的索引如果SQL语句没有走到索引,则最优化处理器只能使用表格索引的方式,即遍历这张表格,来查找记录。遍历过程中,会将所有的记录依次加锁。如果SQL语句走到索引,则最优化处理器会选择采用索引搜索,也就是会借助索引结构来找记录。只会将索引上的记录加锁。这样可以有效的避免锁等待。,编程建议(五),其他(非编程)尽量避免锁升级,正确调整参数LOCKLIST,MAXLOCKS 也可能存在系统表被锁的情况,可对系统表做runstats,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号