位置: 编程技术 - 正文

DB2死锁的解决过程全记录(db2 deadlock)

编辑:rootadmin

推荐整理分享DB2死锁的解决过程全记录(db2 deadlock),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:db2锁住,db2 deadlock,db2 deadlock,db2数据库死锁产生的原因及解决方案,db2 查询死锁语句,db2死锁的原因及解决方法,db2数据库死锁产生的原因及解决方案,db2死锁可以自己解开吗,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

DB2死锁的解决过程全记录(db2 deadlock)

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

1、因为生产环境数据量大,我们无法把生产环境中关联表的数据导入到测试环境。也就是说,无法模拟数据量。2、没有任何log输出。因为生产环境的log输出级别是ERROR。3、无法在生产环境进行测试,因为客户不允许。4、生产环境的数据库无法开启快照等功能。因为会影响性能。

大家可以想象,在没有快照等功能下,分析死锁就只能靠分析代码了。但是这个处理非常复杂,单凭分析代码,没有任何头绪。 阶段1:我们怀疑是数据量的原因 由于生产环境的数据量特别大,这个处理还有很多其他表的处理。所以我们怀疑是不是大数据量导致系统负荷过高,导致了死锁?于是我们取得了发生死锁时CPU,硬盘,网络等等负载信息。没有找到任何线索。 阶段2:做一个测试程序,在测试环境中用多线程模拟多用户去做这个处理。 为了能够在开发环境再现出这个死锁,我们做了一个多线程的测试程序,模拟多用户运行。可惜,还是没有再现出来。 阶段3:分析测试环境数据库和产品环境数据库的差异 此时我们怀疑还是数据量导致的问题。于是我们尽可能的将开发环境的数据弄得和产品环境一样多。之后在运行测试,还是没有再现出来。 阶段4:分析用户的操作log 没有任何办法的情况下,我们只好分析用户的操作log,希望从中找到一点线索。功夫不负有心人,我们发现,当两个人同时进行这个操作的时候,基本都会发生死锁。所以,我们判断还是两个人同时操作导致的问题。但是,为什么开发环境上模拟了很多人的操作,却没有发生死锁呢? 阶段5:发现数据库设置的问题 我们又修改了测试程序,将模拟的用户数量提高,但是很不幸,仍然没有再现这个问题。此时我们注意到了:是不是开发环境的数据库设置和产品环境的数据库设置不同?我们对比了一下两个数据库的设置:发现好多参数不同。但是我们仅仅关注了和锁有关的设置,也就是包含 LOCK关键字的设置。 阶段6:将测试环境数据库和产品环境数据库的设置保持一致 我们将所有和lock有关的设置都改成了和产品环境一直。但是仍然没有再现这个死锁。终于,一个人发现,"cur_commit"这个设置不同。于是查询文档,发现了 cur_commit的特点。当 cur_commit = false的时候,下列情况会造成死锁:线程1插入数据A,然后线程2插入数据B。在线程2还没有提交事物之前,线程1查询数据A,就会造成死锁了。开发环境中,cur_commit = true,所以我们一直也模拟不出来这个现象。于是,我们把cur_commit也改成了 false。 阶段7:使用测试程序去模拟 我们修改了测试程序,模拟上面两个线程的操作,成功地再现了这个死锁。错误的log信息和产品环境上也是一致的。 阶段8:使用画面操作去模拟 然后我们修改了程序,使用画面去操作,也成功地再现了这个死锁。 解决方案: 解决方案很简单,就是把查询语句中的条件加为索引,就不会出现死锁了。由于这个表数据量不大,所以性能几乎没有任何影响。

DB2常用傻瓜问题问(四)第1/2页 正在看的db2教程是:DB2常用傻瓜问题问(四)。.如何删除序列?DROPSEQUENCESEQUENCE_NAME.DB2支持导入(IMPORT)的文件格式有?有:DEL,ASC,IXF,WSF等.DB2支持导出(EXP

DB2常用傻瓜问题问(三) 正在看的db2教程是:DB2常用傻瓜问题问(三)。大家在应用DB2的时候可能会遇到一些看似简单的问题,特别对新手来说,我在此简单的总结一下,发布给大家,

DB2常用傻瓜问题问(二)第1/2页 正在看的db2教程是:DB2常用傻瓜问题问(二)。大家在应用DB2的时候可能会遇到一些看似简单的问题,特别对新手来说,我在此简单的总结一下,发布给大家,

标签: db2 deadlock

本文链接地址:https://www.jiuchutong.com/biancheng/312242.html 转载请保留说明!

上一篇:使用SQL Server连接服务器访问DB2 Server(sqlserver连接数据库的方法)

下一篇:DB2常用傻瓜问题1000问(四)第1/2页(db2 knowledge center)

  • 进货开了发票也写了购销合同要交印花税吗?
  • 个税申报按权责发生制行吗?
  • 税控盘开票机号是哪个
  • 款已付未收到发票怎么开
  • 抵扣认证的发票开红字有影响吗
  • 分公司是否需要刻章
  • 经营性应收项目和经营性应付项目
  • 股权转让如何避免土地增值税
  • 网上公司报税流程图
  • 第三方佣金及成本还是费用
  • 应收账款进行债务转让
  • 工程保险费属于企业管理费吗
  • 自产自销农产品企业所得税
  • 税控盘怎么进行升级
  • 开票的时候如何把价格分散开
  • 医疗器械 税点
  • 股东分红纳入社会保险吗
  • 个人借款给公司利息多少合法
  • 研发失败的项目可以加计扣除吗
  • 增值税做账做错怎么处理
  • 实验耗材发票内容怎么写
  • 出售使用过的固定资产如何开票
  • 发票进项抵扣有什么用
  • 外地项目的预交税款没交怎么办
  • 经营租赁交什么税种
  • 应交增值税出口退税年末如何结转?
  • 已开发票做账联放哪里
  • 设备安装服务几个点
  • 维修是几个点的税率
  • 上缴财政的收入 企业所得税
  • 递延收益为什么计税基础为0
  • 销售自己使用过的物品的税率
  • 收到多开的工程款怎么办
  • php如何解决异常处理
  • PHP:pg_escape_literal()的用法_PostgreSQL函数
  • ghoststarttrayapp.exe是什么进程 有什么作用 ghoststarttrayapp进程查询
  • 长期应付款的摊余成本怎么计算
  • 董事会会费应计什么科目
  • php img
  • 迭代器,生成器
  • PHP jQuery+Ajax结合写批量删除功能
  • 出差餐补如何做账
  • 一般纳税人不得从销项税额中抵扣的进项税额有哪些?
  • phpcms目录结构
  • 图文详解塘鲺、鲶鱼的区别介绍
  • 没有金税盘可以开专票吗
  • 如何区分生产类型
  • 企业的哪些支出不得列入成本费用原因
  • 利息为什么存在
  • 固定资产净值如何处理
  • 基建结束后该做哪些工作
  • 固定资产处置怎么报税
  • 预提短期借款利息的会计科目
  • 备用金预期有什么影响
  • 哪些企业执行新的租赁政策
  • 会计入职新公司
  • sqlserver全文索引
  • 如何创建sql server数据库表
  • sql存储过程简单例题
  • mac mysql密码忘记了怎么办
  • mysql 5.7.13 winx64安装配置方法图文教程(win10)
  • 安装mysql提示one or more
  • ccs 运行
  • Win7系统关闭怎么办
  • bios术语
  • windows8自动开机
  • hpzts04.exe是什么进程 有什么作用 hpzts04进程查询
  • win10引导记录损坏修复方法详解
  • unity 漫反射
  • 优化了一些已知问题是什么意思安不安装
  • 老生常谈的道理
  • 在浏览器中打开是什么意思
  • javascript教程
  • unity shader saturate
  • js table
  • js变量作用域
  • 浙江网上税务局登录官网
  • 车辆购置税怎样做账
  • 浙江省个体工商户税收政策
  • 企业年报通怎么注销
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设