DB2锁表的原因主要有哪些?
时间:2019-01-05 22:31 来源:未知 作者:IT
1. 锁超时
-
锁等待
当某应用程序已经取得一个对象上的锁定(例如X锁),而第2个程序企图取得同一对象上无法并存的锁定(例如S锁定)时,则第2个程序的SQL指令就无法执行下去,发生锁定等待。
-
锁超时
LOCKTIMEOUT参数
db cfg中,指定一个应用程序被允许的锁等待的时间,单位是秒 。缺省情况下,LOCKTIMEOUT是-1,意味着锁等待时间无限期。建议修改。
当应用程序等待时间超过LOCKTIMEOUT时间,仍未获得锁,则数据库返回-911错误,reason code为68。
2.死锁
死锁是因为两个并发的进程或者线程同时各自占有一个资源上的锁,又需要占有对方资源上的锁,但又都各不相让造成的。
相关参数:
DLCHKTIME参数
DB2检查死锁的间隔时间,单位是毫秒
每隔DLCHKTIME这么长的时间,数据库死锁检查器就会检查有无死锁存在。如有死锁,会选择回滚其中的某一个事务,让另外一个事务完成交易。回滚的事务返回返回-911错误,reason code为2。
3.锁升级
每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级的功能,将行锁升级为表锁,从而达到减少锁的数量,降低锁的内存开销的目的。
相关参数:
LOCKLIST参数
在一个数据库全局内存中用于锁存储的内存。单位为页(4K)
MAXLOCKS参数
一个应用程序允许得到的锁占用的内存所占locklist大小的百分比。
(责任编辑:IT)
1. 锁超时
当某应用程序已经取得一个对象上的锁定(例如X锁),而第2个程序企图取得同一对象上无法并存的锁定(例如S锁定)时,则第2个程序的SQL指令就无法执行下去,发生锁定等待。
LOCKTIMEOUT参数 db cfg中,指定一个应用程序被允许的锁等待的时间,单位是秒 。缺省情况下,LOCKTIMEOUT是-1,意味着锁等待时间无限期。建议修改。 当应用程序等待时间超过LOCKTIMEOUT时间,仍未获得锁,则数据库返回-911错误,reason code为68。 2.死锁 死锁是因为两个并发的进程或者线程同时各自占有一个资源上的锁,又需要占有对方资源上的锁,但又都各不相让造成的。 相关参数: DLCHKTIME参数 DB2检查死锁的间隔时间,单位是毫秒 每隔DLCHKTIME这么长的时间,数据库死锁检查器就会检查有无死锁存在。如有死锁,会选择回滚其中的某一个事务,让另外一个事务完成交易。回滚的事务返回返回-911错误,reason code为2。 3.锁升级 每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级的功能,将行锁升级为表锁,从而达到减少锁的数量,降低锁的内存开销的目的。 相关参数: LOCKLIST参数 在一个数据库全局内存中用于锁存储的内存。单位为页(4K) MAXLOCKS参数 一个应用程序允许得到的锁占用的内存所占locklist大小的百分比。 (责任编辑:IT) |