写MySQL(TDDL/RDS)出现死锁(DeadLock)-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

写MySQL(TDDL/RDS)出现死锁(DeadLock)

2018-11-15 11:10:19 4636 1

死锁形成的示例
RDS/TDDL、OTS数据库引擎锁的区别
死锁的解决方案
报错信息:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
在实时计算 Flink中,下游数据库使用Mysql等关系数据库(对应的connector为TDDL和RDS),当实时计算频繁写某个表或者资源时,存在死锁风险。

取消 提交回答
全部回答(1)
  • 李博 bluemind
    2019-07-17 23:14:20

    死锁形成的示例
    假设完成一次insert需要依次抢占(A, B) 2个锁。A是一个范围锁,有2个事务(T1,T2),表的schema为(id(自增主键), nid(唯一键))。T1包含2条insert(null, 2),(null, 1), T2包含1条insert(null, 2)。

    t时刻, T1第一条insert插入,此时T1持有(A, B)2个锁。
    t+1时刻T2开始插入,需要等待锁A来锁住(-inf, 2], 此时A被T1拥有,且锁住了(-inf, 2],区间存在包含关系,所以T2依赖T1释放A。
    t+2时刻T1第二条insert执行,需要A锁住(-inf, 1], 该区间属于(-inf, 2],所以需要排队等T2释放锁,所以T1依赖T2释放A。
    当T1和T2相互依赖且相互等待时死锁形成。


    RDS/TDDL、OTS数据库引擎锁的区别
    RDS、TDDL:——InnoDB的行锁是针对索引加的锁,不是针对单条记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的,造成了一整个区域的数据都无法更新。
    OTS:——单行锁,不影响其他数据更新。


    死锁的解决方案
    高QPS/TPS或高并发写入情况场景,建议使用OTS作为结果表,可以解决死锁的问题。一般不建议使用TDDL或者RDS作为Flink Job的结果表。

    如果必须要使用Mysql等关系数据库作为sink节点,有以下建议:

    确保没有其他读写业务方的干扰
    如果Job的数据量不大可以尝试单并发写入。但是在高QPS/TPS、高并发情况下,写入性能会降低。
    尽可能不使用UniqueKey, 带UniqueKey(唯一主键)表的写入可能会导致死锁。如果业务要求表必须包含UniqueKey,请按照字段区分能力从大到小排列来定义UniqueKey,可大幅降低死锁出现概率。如一个md5值的区分能力大于day_time(20171010)。
    根据业务特点做分库分表,尽可能避免单表写入,实施细节请联系对应的DBA。

    1 0
相关问答

20

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1212169浏览量 回答数 20

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 159293浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 340286浏览量 回答数 8

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148462浏览量 回答数 22

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 133076浏览量 回答数 2

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 262716浏览量 回答数 39

21

回答

请教一下数据量有100万条左右要什么配置?

易网网络 2013-03-27 15:18:02 193488浏览量 回答数 21

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 309121浏览量 回答数 251

54

回答

Flink Forward Asia 2021 有奖问答

阿里云实时计算Flink 2021-12-29 17:30:44 464920浏览量 回答数 54

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 205355浏览量 回答数 2
+关注
李博 bluemind
云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147
2107
文章
1103
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载