死锁误解
时常听客户聊起死锁时,都认为死锁完全是应用的问题,是应用SQL语句获取资源的逻辑有问题才产生死锁,所以但凡看到死锁,都需要交给开发去定位业务逻辑。其实造成死锁的原因有很多,本文模拟重现的为块上ITL事务槽不足引起死锁的案例。
故障模拟
测试环境通过以下脚本,初始化表T事务槽两个,插入2000条数据装满两个块儿。四个会话插入数据不提交,占满两个事务槽,再两两插入不同块儿的数据,可重现故障。
故障分析
如上操作中会话一,会话二,会话三,会话四 在第一次插入的时候,会占满两个块共四个事务槽,dump 了一个块确认下。两个事务槽均被占用,第二次插入时,数据上均无冲突,但事务槽会有争用,进而引起死锁。SQL语句等待事件
处理思路
参考文档 如有索引也需要调整。
巡检思路
巡检日志告警 以及 等待事件。
领取专属 10元无门槛券
私享最新 技术干货