db2 在编辑器中查看sql语句执行计划在_DB2数据库有锁了怎么办

172c6ee2edcedf8460c462d8b29ad6d1.gif

点击上方蓝字关注我们

172c6ee2edcedf8460c462d8b29ad6d1.gif

在日常运维中经常会遇到数据库出现了锁,导致前台应用运行缓慢,甚至应用无法使用的问题,由于在运维过程中,会出现各种各样的问题,遇到问题,数据库管理员会手忙脚乱,不知道从何处下手。如果着手分析的方向发生了错误,时间更是浪费严重,问题得不到及时解决,甚至有可能采取了错误的措施,导致更严重的后果。

其实导致数据库出现问题的原因有很多种,这个时候就需要我们通过自己学到的知识,经验的积累,来快速的定位问题的原因,下面跟着我来一起了解下DB2数据库有锁了该怎么处理;

一、锁链分析和处理

发现数据库中有锁,我们首先查看锁链情况,查看是被那个会话锁的,可以通过DB2的工具db2top来查看

db2top-d 数据库名

db2top-d sample

0d50aa80376d04be449266db042eeee2.png

然后输入U可以看到等待信息

3f73e938c6611947921ecd1e6ef7e44d.png

在输入L可以看到锁链信息

2b608caad717875f2eac44a3e6005174.png

在这个输出里面,7这个应用是锁的持有者,其他都是等待者。下一步就是分析7 在执行什么语句,是否需要杀,是否需要优化。

然而对于已经堵塞的Db2数据库,db2top可能根本打不开。这个时候就需要db2pd工具来查看锁等待的信息。

二、通过db2pd 查看锁等待

db2pd-d smaple -wlock

981167937eb9450524c348fdc960fda4.png

在这个db2pd的输出里面,第八列Sts就是持有者(G)和等待者(W)。第四列lockname是对应的锁。需要综合这两个信息,才能知道应用的等待关系。

三、分析锁问题

通过上面的信息,找到了锁的持有者源头,但是现在还需要知道持有者在运行什么语句。这个可以通过db2pd的application选项和dynamic选项综合分析出当前正在执行和上次执行的语句。

db2pd查看application

db2pd-d sample -application 7

08ab13b99ba588eb42cc8b76326ab1e3.png

在db2pd工具的application输出里面,C-AnchID和C-StmtUID结合起来指向当前正在运行的语句。L-AnchID和L-StmtUID结合起来指向上一次执行的语句。要获得详细的语句,需要从dynamiccache 里找到。图中C-AnchID和C-StmtUID都是0,也就是当前应用没有执行任何语句。而L-AnchID和L-StmtUID是201和1,上一次执行的语句是可以获取到的。

db2pd查看动态语句

db2pd-d sample -dynamic anch=201

393e3a5e807e0261926f98f97d9e4d24.png

基于L-AnchID为201去查dynamiccache,可以看到StmtUID为1的sql语句是”insertinto t2values('5','cc')”。至此就得到了锁的持有者正在运行的语句或者最后运行的语句是什么。这样就可以和开发一起分析这个问题是什么原因导致的。

同样的方法我们也可以找到是什么语句在等待

6feefb1371d358d0f20fd2dcc0de80a5.png

0abe303ca74713c6ff6acbda1432319e.png

可以看出是select* from t2这个语句在等待

四、处理锁问题

通常异常出现锁问题的原因分两种:

1、不常见的SQL:当前SQL不是业务常用SQL,例如新上线的功能,管理节点发起的维护SQL,或者个人后台发起的SQL等。因为测试不充分,没有评估好对生产业务的影响。这种情况下一般选择先杀掉,并且控制不要再次发起,等优化完再上线。

2、常见SQL突然变慢:例如执行计划发生变化,导致SQL变慢,从而促发了锁竞争的问题。这种情况仅仅杀SQL可能是不管用的,因为SQL还会被调用起来。这时需要立刻获取SQL的查询计划,抓紧时间调优。例如运行runstats,创建必要的索引等方式。

以上是我在虚拟做的锁等待的实验,来带领大家一起了解处理锁问题的分析思路,在实际运维中锁的问题可能需要更加复杂,但是只要大家能耐心的分析,一定能解决问题。

d12b1467a42864bebbddf31f5d1fe799.gifEND

a67f23c2dd086264ae4782ada5d2c307.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值