博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql并发replace死锁
阅读量:6590 次
发布时间:2019-06-24

本文共 431 字,大约阅读时间需要 1 分钟。

最近为了提高日志入库的速度,把入库的代码改成并发的。发现部分日志入库的时候mysql报错:

Error 1213: Deadlock found when trying to get lock; try restarting transaction.

字面意思可见是有死锁了。

出现死锁,首先查询状态日志,mysql执行:

SHOW ENGINE INNODB STATUS

查询LATEST DETECTED DEADLOCK标签下的日志,可见最近一次发生死锁的语句。再加上对比正常执行的sql语句,问题定位在使用replace into上。

innodb是行级锁,而我是并发且批量去使用replace into去更新表,很容易造成同时两条语句去更新一行数据。replace的时候会给要更新的行加上排他锁(X锁),这就是造成死锁的原因。(有唯一索引的表在insert的时候,如果发生了唯一索引冲突,会加上读锁(S锁),理论上在并发处理的时候不会死锁?待证实)。

转载地址:http://wrkio.baihongyu.com/

你可能感兴趣的文章
网络安全设计、配置与管理大全
查看>>
check outlook mailbox size
查看>>
什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)
查看>>
java 泛型编程(一)
查看>>
Dell PowerEdge R940解析:四路顶配服务器维护平民化
查看>>
《数据重现》赠书活动开始
查看>>
Android 中文 API (93) —— BaseExpandableListAdapter
查看>>
PowerShell中单引号和双引号的区别
查看>>
【ARM】gpio·arm体系结构之gpio
查看>>
数据库启动时遇到ORA-01578错误
查看>>
Fedora 12 (Constantine)Beta版及Alpha镜像下载
查看>>
稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
查看>>
Who's Using Cyberthreat Intelligence and How?
查看>>
【翻译】SQL Server索引进阶:第六级,标签
查看>>
确定两串乱序同构
查看>>
寒假研究计划
查看>>
Android:ListView、BaseAdapter、convertView、ListView优化及事件、notifyDataSetChanged()
查看>>
新版发布功能上线,新增「大屏快照」功能!
查看>>
代码调优及其他zz
查看>>
Centos7+Postfix+Dovecot实现邮件收发
查看>>