设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

快被系统性能逼疯了?你需要这份性能优化策略(4)

发布时间:2019-01-05 06:00 所属栏目:117 来源:dbaplus社群
导读:当多台任务服务器同时运行大额指令发送后台线程,即多个生产者线程并行更新数据库指令表时,数据库快照检测到存在数据库死锁,或通过db2evmon -db corpdb -evm DB2DETAILDEADLOCKdlock.txt 生成死锁监控文件,快照

当多台任务服务器同时运行大额指令发送后台线程,即多个生产者线程并行更新数据库指令表时,数据库快照检测到存在数据库死锁,或通过db2evmon -db corpdb -evm DB2DETAILDEADLOCK>dlock.txt 生成死锁监控文件,快照或监控文件中存在deadlock的情况。

DB2数据库有自动解除死锁功能,死锁超时时间默认为10s,数据库会随机选择一个死锁事务kill掉。本案例由于是后台任务,所以用户感觉不到死锁;如果是联机交易,一个用户会发现交易失败,另一个用户交易成功,但是会感觉交易变慢。指令发送后台任务模型详见下一章节内容。

2)数据库死锁发生原理

两个不同的数据库事务使用排它锁锁住了同一张表的不同行记录,并且互相等待读取对方锁住的行记录。

快被系统性能逼疯了?你需要这份性能优化策略

3)导致死锁的可能原因

全表扫描、大事务、事务之间对死锁访问顺序交叉等。

4)死锁问题排查过程

Step1:分析数据库快照和死锁监控日志,查看导致死锁的SQL,定位问题SQL。

Step2:问题SQL不存在事务之间对死锁访问顺序交叉的情况,当时尚不清楚程序中的全表扫描、大事务可能会导致死锁,因此做了以下实验:

  • 模拟问题SQL在两个不同的数据库客户端执行SQL,查看数据是否更新成功。

  • 完全按照源程序的SQL逻辑执行验证:

UPDATE ( SELECT BP_SRVR_IP FROM ${tableName} WHERE TSK_STAT='TODO' AND ( BP_SRVR_IP IS OR BP_SRVR_IP='') AND PRTY =? AND eff_tm <= CURRENT TIMESTAMP FETCH FIRST 50 ROWS ONLY WITH RS) t SET BP_SRVR_IP=?

  • 不加索引,A事务在R上加了X锁,B事务无法在任何记录上加X锁,B事务会等待A事务提交后再加锁。

  • 增加索引,A事务在R记录加了X锁,B事务在S记录加X锁,互不冲突。

Step3:实验发现查询SQL增加with RS隔离级别,查询效率会更高。当A事务已对记录R加X锁,B事务扫描到R记录时,如果是CS隔离级别,B事务会自动退出,返回空结果集;如果是RS隔离级别,B事务会等待A事务完成后,跳过R记录,对符合条件的R+1记录加X锁。

Step4:PRTY字段增加索引,没有出现死锁问题;或者不加索引,维持全表扫描不变,大事务改成小事务后,也没有出现死锁问题。

5)两点经验

  • 需要提前熟悉DB2锁的种类和作用,隔离级别的种类和作用,表锁和行锁发生的条件。比如,全表扫描时,DB2会在整个表上加表级锁;如果是增删改操作,会加表级排他锁。

  • 在不清楚死锁原因时,或者不了解锁的机制和隔离级别机制时,不同隔离级别下SQL的影响范围,可以在数据库客户端工具上进行手工小实验,验证数据库机制以及猜想。

七、后续提升网银系统性能备选方法

1、增加缓存的使用

  • 对于读多写少的数据,可以加载到分布式缓存,降低数据库压力;

  • 目前已经将部分参数和错误码数据放到分布式缓存,后续谨慎提高缓存使用率,降低数据库压力。

2、精简BP日志。删除交易访问记录日志表的操作。

3、合并、精简接口数量,前端缓存数据。

【编辑推荐】

  1. 十年数据泄露事件大观:“互联网+”时代,各行各业都易中招
  2. Google 移除了 Fuchsia 中代号 Armadillo 的系统 UI
  3. 谷歌ReCaptcha系统被破解,机器语音验证准确率高达85%
  4. 深度学习之父的忧虑:数据泄漏 AI军备与对批判的缺乏
  5. 确认!谷歌Fuchsia系统支持运行安卓App
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读