数据库巡检系列-死锁成因1

死锁误解

时常听客户聊起死锁时,都认为死锁完全是应用的问题,是应用SQL语句获取资源的逻辑有问题才产生死锁,所以但凡看到死锁,都需要交给开发去定位业务逻辑。其实造成死锁的原因有很多,本文模拟重现的为块上ITL事务槽不足引起死锁的案例。

故障模拟

测试环境通过以下脚本,初始化表T事务槽两个,插入2000条数据装满两个块儿。四个会话插入数据不提交,占满两个事务槽,再两两插入不同块儿的数据,可重现故障。

故障分析

如上操作中会话一,会话二,会话三,会话四 在第一次插入的时候,会占满两个块共四个事务槽,dump 了一个块确认下。两个事务槽均被占用,第二次插入时,数据上均无冲突,但事务槽会有争用,进而引起死锁。SQL语句等待事件

处理思路

参考文档 如有索引也需要调整。

巡检思路

巡检日志告警 以及 等待事件。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706G0FSGL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券