设为首页 收藏本站
查看: 1388|回复: 0

[经验分享] DB2 查找引起锁等待或死锁的客户端进程和SQL语句

[复制链接]

尚未签到

发表于 2016-11-17 05:44:46 | 显示全部楼层 |阅读模式
【简介】
      本文主要用于定位系统中导致锁等待或者死锁的原因.

【详细信息】
1. 首先要打开DBMS监控开关和快照开关:
db2 update dbm cfg using DFT_MON_LOCK on DFT_MON_STMT on
db2 update monitor switches using lock on buffpool on sort on uow on table on statement on

2.   获取锁相关的快照信息:
db2 get snapshot for database on <dbname> |grep -i lock



Locks held currently                       = 346

Lock waits                                 = 257

Time database waited on locks (ms)         = 0

Lock list memory in use (Bytes)            = 147136

Deadlocks detected                         = 5

Lock escalations                           = 0

Exclusive lock escalations                 = 0

Agents currently waiting on locks          = 0

Lock Timeouts                              = 0

Block IOs                                  = Not Collected

Pages from block IOs                       = Not Collected

Internal rollbacks due to deadlock         = 4

Number of MDC table blocks pending cleanup = 0

    Memory Pool Type                           = Lock Manager Heap



3. 如果存在锁等待或者死锁,找到锁的信息:

db2pd -db <dbname> -locks showlocks wait



Address            TranHdl    Lockname                   Type       Mode Sts Owner      Dur HoldCount Att ReleaseFlg

0x0770000020471B00 27         0002001B000000000001000252 Row        .NS W   28         1   0          0x00 0x00000004 TbspaceID 2     TableID 27     PartitionID 0 Page 1 Slot 2

0x0770000020471840 28         0002001B000000000001000252 Row        ..X G   28         1   0          0x00 0x40000000 TbspaceID 2     TableID 27     PartitionID 0 Page 1 Slot 2



可以查找出锁名称,锁的位置(使用tablespaceID,tableID, recordID 来标识)

其中列Sts中:W 表示等待锁,G代表已经获得锁



4. 通过TranHdl的值查找等待锁的agentid.

db2pd -db <dbname> -transactions |grep 27



Address            AppHandl [nod-index] AgentEDUID Priority   Type     State       ClientPid Userid   ClientNm Rowsread   Rowswrtn   LkTmOt DBName

0x077000002032A300 20686    [000-20686] 27         5          READ    0x00000000 0x00000000 0x000000000000 0x000000000000 0               0               0x000000DF81D2 1          0        n/a               

AppHandl列的值表示等待锁的agentid.



5. 通过等待锁的agentid查找出等待锁的SQL和占有锁的agentid

db2 get snapshot for application agentid 20686



    Blocking cursor                            = YES

    Dynamic SQL statement text:

   select trans_st from xxxdb.tbl_xxx_trans_log1_1 where sys_tra_no='004918'

ID of agent holding lock                 = 20687

Application ID holding lock              = *LOCAL.xxxdb.110130082456

Lock name                                = 0x0002001B000000000001000252

Lock attributes                          = 0x00000000

Release flags                            = 0x00000004

Lock object type                         = Row

Lock mode                                = Exclusive Lock (X)

Lock mode requested                      = Next Key Share (NS)

Name of tablespace holding lock          = USERSPACE1

Schema of table holding lock             = XXX
Name of table holding lock               = TBL_XXX_TRANS_LOG1_1
Data Partition Id of table holding lock = 0

Lock wait start timestamp                = 01/30/2011 16:44:33.771482

还可以得到存在锁的数据库表名和schema。

6.通过占有锁的agentid找出引起锁等待的SQL和客户端进程
db2 get snapshot for application agentid 20687

Application handle                                                = 20687

Application status                         = UOW Waiting

Status change time                         = 01/30/2011 16:44:31.200616

Application code page                      = 1386

Application country/region code            = 1

DUOW correlation token                     = *LOCAL.xxx.110130082456

Application name                           = db2bp

Application ID                             = *LOCAL.xxx.110130082456

Sequence number                            = 00002

Dynamic SQL statement text:

update xxxdb.tbl_xxx_trans_log1_1 set trans_st='10000' where sys_tra_no='004918'


7. 关闭快照监控和DBMS监控开关
db2 update monitor switches using lock off buffpool off uow off sort off table off statement off
db2 update dbm cfg using DFT_MON_LOCK off DFT_MON_STMT off

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-301285-1-1.html 上篇帖子: AIX中db2汉字用检索出来在WINDOWS是乱码 下篇帖子: DB2 XML 编程,第 4 部分: 在基于 Web 的 DB2 应用程序中集成来自不同数据源的数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表