db2锁表后如何解锁_DB2死锁的解决过程全记录

生产环境里使用的数据库是DB2。但是最近频繁出现一个奇怪的死锁现象:某一个select sql 语句总是会出现死锁。

按照以往的经验,通常都是update/delete之类的更新sql语句会出现死锁的问题。而且这个 select sql 语句是一个很普通的sql,没有任何大数据量的处理。

分析这个死锁,有很多难以处理的地方。

1、因为生产环境数据量大,我们无法把生产环境中关联表的数据导入到测试环境。也就是说,无法模拟数据量。

2、没有任何log输出。因为生产环境的log输出级别是ERROR。

3、无法在生产环境进行测试,因为客户不允许。

4、生产环境的数据库无法开启快照等功能。因为会影响性能。

大家可以想象,在没有快照等功能下,分析死锁就只能靠分析代码了。但是这个处理非常复杂,单凭分析代码,没有任何头绪。

阶段1:我们怀疑是数据量的原因

由于生产环境的数据量特别大,这个处理还有很多其他表的处理。所以我们怀疑是不是大数据量导致系统负荷过高,导致了死锁?

于是我们取得了发生死锁时CPU,硬盘,网络等等负载信息。没有找到任何线索。

阶段2:做一个测试程序,在测试环境中用多线程模拟多用户去做这个处理。

为了能够在开发环境再现出这个死锁,我们做了一个多线程的测试程序,模拟多用户运行。可惜,还是没有再现出来。

阶段3:分析测试环境数据库和产品环境数据库的差异

此时我们怀疑还是数据量导致的问题。于是我们尽可能的将开发环境的数据弄得和产品环境一样多。

之后在运行测试,还是没有再现出来。

阶段4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值