现象
代码执行到update语句时卡住了,不再往下执行(没有任何日志的输出)
思路
- 定位数据库指定表的锁信息
- 定位锁等待的两个或多个会话
- 定位不同会话执行的最后SQLID
- 定位SQLID对应的具体SQL
实操
-
进入linux用户,并登陆db2
db2 connect to 数据库名称 user 用户名 using 密码 或 db2 connect to 数据库名称 user 用户名(enter后再输入密码)
-
定位数据库指定表的锁信息
db2top -d 数据库名称
enter之后出现下图:
输入U,显示所有锁信息如下图:
- 定位锁等待的两个或多个会话
输入T,显示会话之间锁等待的关系如下图:
“ A -> B ” 表示B等待A会话释放资源
-
定位不同会话执行的最后SQLID
db2pd -d 数据库名称 -applications |grep -i 会话标识
-
定位SQLID对应的具体SQL
db2pd -d 数据库名称 -dynamic |grep -i SQL标识
结论:会话50401中最后执行的SQL(563)(update)在等会话50367提交事务