软件开发Db2db2死锁

DB2数据库不会检测死锁和锁超时?

环境:LINUX
db2level:
DB21085I Instance "db2inst1" uses "64" bits and DB2 code release "SQL09010" with level identifier "02010107".
Informational tokens are "DB2 v9.1.0.0", "s060629", "LINUXAMD64", and Fix Pack "0".

问题:
数据库不会检测死锁和锁超时。
也就是说理论上应该检测到死锁和锁超时的并发上面,这个数据库没有检测出来,然后一直在锁等待。

db2 get db cfg for TSO | grep -i LOCK
Max storage for lock list (4KB) (LOCKLIST) = AUTOMATIC
Percent. of lock lists per application (MAXLOCKS) = AUTOMATIC
Interval for checking deadlock (ms) (DLCHKTIME) = 10000
Lock timeout (sec) (LOCKTIMEOUT) = 15
Block log on disk full (BLK_LOG_DSK_FUL) = NO

DB2DETAILDEADLOCK的state确认为1。

请问,DB2的死锁和锁超时检测,在什么情况下会失效,该如何检查?万望赐教。
这个数据库不是我部署的,我也对部署这个库的人很无力。

参与25

4同行回答

仙道彰仙道彰数据库开发工程师花旗集团
检查下数据库管理器(dbm)中监控开关的设置情况,db2 get monitor switches | grep -i lock 每个连接至数据库的应用程序(会话)都有其自己的监视器开关集,这些监视器开关与数据库管理器和其他应用程序无关。应用程序在连接至数据库时,从数据库管理器上继承他们的监视器开关设...显示全部

检查下数据库管理器(dbm)中监控开关的设置情况,db2 get monitor switches | grep -i lock
每个连接至数据库的应用程序(会话)都有其自己的监视器开关集,这些监视器开关与数据库管理器和其他应用程序无关。应用程序在连接至数据库时,从数据库管理器上继承他们的监视器开关设置。可以执行:get monitor switches 命令查看所有的监视开关设置情况。

收起
互联网服务 · 2017-08-24
macrozengmacrozeng数据库管理员IBM
你把 LOCKTIMEOUT 修改成 15 以后有没有重启? the database must be shutdown and reactivated before the configuration parameter changes become effective.如果没生效将是下面的结果 db2 get db cfg |grep LOCKTIMEOUT Lock timeout (sec) (...显示全部

你把 LOCKTIMEOUT 修改成 15 以后有没有重启?
the database must be shutdown and reactivated before the configuration parameter changes
become effective.

如果没生效将是下面的结果

db2 get db cfg |grep LOCKTIMEOUT
Lock timeout (sec) (LOCKTIMEOUT) = 15

$ db2 get db cfg show detail |grep LOCKTIMEOUT
Lock timeout (sec) (LOCKTIMEOUT) = -1 15

收起
政府机关 · 2017-08-24
浏览3144
  • 已经重启过了,确认是15秒。目前确实死锁监测和锁超时检测失效了。
    2017-08-25
xmherzxmherz测试工程师中软海晟
我的死锁测试例子是这样的:假设表TAB里面有4条记录,分别表示为r1,r2,r3,r4我是自己开了2个会话窗口:会话1 update r1 不提交会话2 update r2 不提交会话1 select r2 进入锁等待。。。会话2 select r1 也进入锁等待。。。之后就是无限的锁等待正常情况下,最后一步是会出现死锁...显示全部

我的死锁测试例子是这样的:
假设表TAB里面有4条记录,分别表示为r1,r2,r3,r4
我是自己开了2个会话窗口:
会话1 update r1 不提交
会话2 update r2 不提交
会话1 select r2 进入锁等待。。。
会话2 select r1 也进入锁等待。。。
之后就是无限的锁等待

正常情况下,最后一步是会出现死锁回滚的。
我在另外一个环境上面测试,是会正常死锁回滚的,就这个环境不会。

Default database monitor switches
Buffer pool (DFT_MON_BUFPOOL) = ON
Lock (DFT_MON_LOCK) = ON
Sort (DFT_MON_SORT) = ON
Statement (DFT_MON_STMT) = ON
Table (DFT_MON_TABLE) = ON
Timestamp (DFT_MON_TIMESTAMP) = ON
Unit of work (DFT_MON_UOW) = ON
Monitor health of instance and databases (HEALTH_MON) = ON

快照监控已经全开。

分割线*
问题解决了,升级DB2 补丁就OK了。

收起
软件开发 · 2017-08-24
浏览3072
chusichusi软件开发工程师新数科技
所有的关系型数据库都会检测死锁,DB2的死锁探测器默认10秒启动一次,发现死锁后随机挑选其中一方强制回滚,跟你说的这个参数DB2DETAILDEADLOCK没关系。至于锁超时,倒是有可能应用在连接级别另外自定义了锁超时时间覆盖了数据库参数LOCKTIMEOUT的设置。能说说你们是根据什么现...显示全部

所有的关系型数据库都会检测死锁,DB2的死锁探测器默认10秒启动一次,发现死锁后随机挑选其中一方强制回滚,跟你说的这个参数DB2DETAILDEADLOCK没关系。
至于锁超时,倒是有可能应用在连接级别另外自定义了锁超时时间覆盖了数据库参数LOCKTIMEOUT的设置。

能说说你们是根据什么现象怎么判断数据库没有检测死锁的吗?

收起
软件开发 · 2017-08-24
浏览3034

提问者

xmherz
测试工程师中软海晟

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-08-24
  • 关注会员:4 人
  • 问题浏览:4895
  • 最近回答:2017-08-24
  • X社区推广