DB2会话之间锁问题排查

现象

代码执行到update语句时卡住了,不再往下执行(没有任何日志的输出)

思路

  • 定位数据库指定表的锁信息
  • 定位锁等待的两个或多个会话
  • 定位不同会话执行的最后SQLID
  • 定位SQLID对应的具体SQL

实操

  1. 进入linux用户,并登陆db2

     db2 connect to 数据库名称 user 用户名 using 密码
     或 
     db2 connect to 数据库名称 user 用户名(enter后再输入密码)
    
image.png
  1. 定位数据库指定表的锁信息

     db2top -d 数据库名称
    
image.png

enter之后出现下图:


image.png

输入U,显示所有锁信息如下图:


image.png
  1. 定位锁等待的两个或多个会话

输入T,显示会话之间锁等待的关系如下图:


image.png
“ A -> B ” 表示B等待A会话释放资源
  1. 定位不同会话执行的最后SQLID

     db2pd -d 数据库名称 -applications |grep -i 会话标识
    
image.png
image.png
  1. 定位SQLID对应的具体SQL

    db2pd -d 数据库名称 -dynamic |grep -i SQL标识

image.png
image.png

结论:会话50401中最后执行的SQL(563)(update)在等会话50367提交事务

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容