Mysql:RC隔离级别下如何提高并发?

RC

  • 最近在Mysql RC隔离级别下遇到个问题:源表并发upsert目标表报错:Deadlock found when try to get lock

一、索引

  • Mysql是支持行锁的,但是行锁只是针对索引列,若删除条件未加索引会导致走表锁,这样就会造成死锁

二、唯一索引

索引建了之后运行还是报错死锁,打开死锁日志

sql 复制代码
show engine innodb status

报错:

sql 复制代码
lock_mode X locks gap before rec insert intention waiting

意思是插入意向锁准备插入之前遇到了间隙锁,但是隔离级别是RC,按照网上的说法和文档,RC隔离级别是不会出现Gap Lock的,后面发现表中若有唯一索引,RC隔离级别下并发也会导致Gap Lock,去掉唯一索引,跑批就没问题了

结论:

  • 在delete + insert,insert...on duplicate key update,replace into等场景中,为了实现判断插入记录和现有物理记录是否冲突和插入记录这两个阶段的原子,unique check的时候会给所有的相同的record和下一个record加上next-key lock.导致后续insert record虽然没有冲突,但还是会被Block住,进而有可能造成死锁的问题

参考文章:RC隔离级别出现Gap Lock

相关推荐
小张同学a.1 小时前
LAMP架构4——MySQL高可用
linux·运维·服务器·数据库·mysql·架构·负载均衡
一条泥憨鱼2 小时前
苍穹外卖【day7| 对购物车进行操作】
java·后端·mysql·苍穹外卖
小码农 - 初7 小时前
MySQL 增删改查
mysql
Xxtaoaooo11 小时前
工业 IoT 存储引擎选型:多模引擎在数据模型与存储设计上的取舍
数据库·物联网·dolphindb
凌虚13 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
五阿哥永琪13 小时前
MySQL中操作json的函数!
数据库·mysql·json
来者皆善13 小时前
了解Mysql优化吗?如何优化索引?
数据库·mysql
赤壁小虾16 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
MC皮蛋侠客16 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python
奈斯先生Vector17 小时前
把 Midjourney 二次编辑做成生产系统:customId 能力令牌、Action Graph 与 WebUI 精修工作台
数据库·人工智能·架构·aigc·音视频·midjourney