DB2查看锁等待的SQL

经常会遇到这样的问题,开发人员告诉DBA,说在数据库端可能有锁,想让找到哪个SQL引起的锁
第一步是查看请求锁和持有锁的应用,通过执行一个SQL
SELECT req_application_handle,lock_name, hld_member, lock_status, hld_application_handle FROM TABLE (MON_GET_APPL_LOCKWAIT(NULL, -2))
输出示例
REQ_APPLICATION_HANDLE LOCK_NAME                  HLD_MEMBER LOCK_STATUS HLD_APPLICATION_HANDLE
---------------------- -------------------------- ---------- ----------- ----------------------
                 35925 00020102000000000000000452          0 W                            35917
想看两个application的详细信息,可以使用db2pd命令看一下
db2pd -db xxxxxxx -apinfo 35925
db2pd -db xxxxxxx -apinfo 35917
但是只能看到request的app的sql详细信息,那个lock holder的看不到了
可以使用其他的db2pd来看lock holder的sql

db2pd -applications查看Anch的信息

$ db2pd -db TXDB -applications 35925

Address            AppHandl [nod-index] NumAgents  CoorEDUID  Status                  C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid                                                            WorkloadID  WorkloadOccID CollectActData          CollectActPartition     CollectSectionActuals  
0x0780000003170080 35925    [000-35925] 1          16914      Lock-wait               493      1          0        0          *LOCAL.db2inst1.151118081726                                     1           192           N                       C                       N  

$ db2pd -db TXDB -applications 35917
Address            AppHandl [nod-index] NumAgents  CoorEDUID  Status                  C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid                                                            WorkloadID  WorkloadOccID CollectActData          CollectActPartition     CollectSectionActuals  
0x0780000003160080 35917    [000-35917] 1          12037      UOW-Waiting             0        0          41       1          *LOCAL.db2inst1.151118081634                                     1           191           N                       C                       N  

根据获取的anch的值,使用以下两个db2pd命令获取执行的sql信息
db2pd -db TXDB -dynamic anch=493
db2pd -db TXDB -dynamic anch=41



请使用浏览器的分享功能分享到微信等