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

相关推荐
oneouto3 小时前
MySQL5.7导入MySQL8.0的文件不成功
mysql
冬瓜的编程笔记4 小时前
【MySQL成神之路】MySQL查询用法总结
数据库·sql
StarRocks_labs4 小时前
StarRocks Community Monthly Newsletter (Apr)
数据库·starrocks·数据查询·routine load·stream load
Gauss松鼠会4 小时前
从数据到智能:openGauss+openEuler Intelligence的RAG架构实战
数据库·架构·database·opengauss·gaussdb
神码小Z4 小时前
支持向量存储:PostgresSQL及pgvector扩展详细安装步骤!老工程接入RAG功能必备!
数据库·向量数据库
惊起白鸽4504 小时前
postgreSQL日常维护
数据库
Musennn5 小时前
SQL 数值计算全解析:ABS、CEIL、FLOOR与ROUND函数深度精讲
数据库·sql
潘yi.5 小时前
PostgreSQL日常维护
数据库·postgresql
2501_911121236 小时前
PostgreSQL日常维护
数据库·oracle
看到千里之外的云6 小时前
Oracle 11g post PSU Oct18 设置ssl连接(使用jks)
数据库·oracle·ssl