> 数据库 > DB2 >

DB2锁表的原因主要有哪些?

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)