几个文章参考

浅谈MySQL的七种锁 link
MYSQL自增列引起死锁 link
MySQL innodb_autoinc_lock_mode设置 link
两个INSERT发生死锁原因剖析link
Innodb 锁的介绍 link
Innodb Next-Key Lock 浅谈 link
innodb 先删除再插入引发的死锁 link

show global variables where variable_name=‘xxx’;//查询mysqlglobal变量

show status like ‘innodb_row_lock%’;//可以通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况;
Innodb_row_lock_current_waits:当前正在等待锁的数量;
Innodb_row_lock_time:从系统启动到现在锁定总时间长度;
Innodb_row_lock_time_avg:每次等待所花平均时间;
Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间长度;
Innodb_row_lock_waits:系统启动到现在总共等待的次数;
如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高
通过设置InnoDBMonitors来进一步观察发生锁冲突的表、数据行

show engine innodb status;//查看mysql的死锁日志

mysql5.6以后版本
set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output_locks=ON;
set GLOBAL innodb_status_output_locks=OFF;//关闭监控
show variables like ‘log_error’;
设 置监视器后,在SHOW INNODB STATUS的显示内容中,会有详细的当前锁等待的信息,包括表名、锁类型、锁定记录的情况等,便于进行进一步的分析和问题的确定。打开监视器以后,默认情况下每15秒会向日志中记录监控的内容,如果长时间打开会导致.err文件变得非常的巨大,确认问题原因之后,要记得删除监控表以关闭监视器

MySQL如何处理死锁

  • 等待 直到超时
  • 开启死锁检测 主动回滚一条uodo长度小的事务

处理普通索引和无索引情况下当前读的导致deadlock问题

1.取消mysql的gap锁
global变量中将innodb_locks_unsafe_for_binlog设置成ON(但是在mysql默认隔离级别可重复读的隔离级别下会产生幻读)
2.程序先查询后删除(利用主键去删除)

处理自增id导致deadlock问题

1.global变量中将innodb_autoinc_lock_mode 设置成2(但是产生的id将会不连续)
2.换成uuid程序生成(默认java或者mysql的uuid在毫秒级产生不同值是没问题的如果并发特别高可以考虑引入 雪花算法处理这个问题)

处理id重复导致deadlock问题

1.global变量中将innodb_deadlock_detect(死锁检测)设置成OFF
解释:mysql默认会在检测到死锁时不会利用innodb_lock_wait_timeout(默认50s)这个值 而是检测到就会直接回滚两个中的一个事务 使用与秒杀高并发的场景
当需要进行唯一性冲突检测时,需要先加一个S lock 所以会导致deadlock.
mysql 事务锁超时时间 innodb_lock_wait_timeout
#查询全局等待事务锁超时时间
SHOW GLOBAL VARIABLES LIKE ‘innodb_lock_wait_timeout’;
#设置全局等待事务锁超时时间
SET GLOBAL innodb_lock_wait_timeout=100;
#查询当前会话等待事务锁超时时间
SHOW VARIABLES LIKE ‘innodb_lock_wait_timeout’;
2.采用雪花算法 业务控制不会出现多个事务对同一条或者多个记录进行更新操作

处理删除不存在记录导致deadlock问题


处理方案:先查询有没有记录在执行相关逻辑

处理inser into select导致deadlock问题

inser into settlement_cost_detail select xxx… FROM settlement_specialfee_up
WHERE work_order_code = ‘xxx’;
这样会锁住settlement_specialfee_up表中相关的记录(有可能是普通索引或者没有索引导致间隙锁锁住一些意想不到的记录)
在这个过程中夹杂这对某些记录的修改操作则很容易发生
处理方案:先查询出来相关记录组装好再进行插入

MySQL DEADLOCK相关推荐

  1. mysql deadlock found when trying to get lock 问题排查

    mysql deadlock found when trying to get lock 问题排查 1 获 取锁等待情况 可以通过检查 table_locks_waited和table_locks_i ...

  2. mysql deadlock 展示_MySQL DeadLock -- 二级索引导致的死锁

    MySQL Deadlock 复现步骤 建表SQL CREATE TABLE `t_wms_order_item` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, ...

  3. mysql deadlock found_mysql deadlock found when trying to get lock 问题排查

    mysql deadlock found when trying to get lock 问题排查 1 获 取锁等待情况 可以通过检查 table_locks_waited和table_locks_i ...

  4. mysql deadlock 记录_MySQL DeadLock故障排查全过程记录

    [作者] 刘博:携程技术保障中心数据库高级经理,主要关注Sql server和Mysql的运维和故障处理. [环境] 版本号:5.6.21 隔离级别:REPEATABLE READ [问题描述] 接到 ...

  5. deadlock mysql_循环update导致的mysql deadlock分析

    最近工作上发生了一次mysql的deadlock事件,发生死锁的是几个批处理的脚本,没有显示执行transaction,而且是一条一条sql执行的,一次更新或者插入一条记录.以往介绍死锁的案例都是使用 ...

  6. mysql deadlock found_MySQLTransactionRollbackException: Deadlock found when trying to get lock

    代码: logger.info("第一步:获取参数..."); List codeDoList = adSspDataMapperDAO .selectListByKey(AppC ...

  7. mysql deadlock found_mysql死锁 Deadlock found when trying to get lock; try restarting transaction

    研究了一下mysql的死锁,记录如下. 比如有2个事务,执行的sql分别如下: 这里用 #N 标识sql语句的执行顺序,下面开启两个mysql客户端连接,其中表的id为主键. 事务1 START TR ...

  8. mysql deadlock log_MYSQL:1213 Deadlock问题排查历程

    mark下自己近期在电商开发中遇到的一个问题-数据库死锁及其排查过程. 先抛一个业务报错日志做为这次梳理的开始 上图是我接收到的错误报警,SQLSTATE[40001]: Serialization ...

  9. mysql deadlock found when trying to get lock暴力解决

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_38383877/arti ...

最新文章

  1. 10行 python 代码做出哪些酷炫的事情?
  2. 深度学习--Keras总结
  3. 从零基础入门Tensorflow2.0 ----六、32cifar10数据训练
  4. 使用微PE工具进行u盘重装系统
  5. 刘毅5000词汇_不熟词汇整理_lesson_15 and part_1
  6. Hexo博客搭建之Next主题的安装与设置
  7. 对音频压缩概念的一些误解--记一次与音视频压缩专家的对话
  8. 计算机专业参赛口号,参赛口号
  9. 目标检测经典论文——YOLOv3论文翻译:YOLOv3: An Incremental Improvement(YOLOv3:增量式的改进)
  10. 利用python读取tomcat中log文件提取出错误日志生成新的文件
  11. python自学第七天之字典的增删改查
  12. vlookup匹配的文字显示0_详解vlookup函数中{1,0}的使用方法,看完后给同事讲讲,秒变大神...
  13. 创业路演前准备好这些,距离融资成功还会远吗?
  14. 如何合并多个.xlsx文件到一个Excel表格(office16)
  15. STARK Low Degree Testing——FRI
  16. 装PDF应用软件重启计算机,Win10每次将PDF默认打开方式设为其他软件,第二天总会改回Edge?...
  17. 英特尔微软强强联手开发智能广告技术
  18. 学习笔记(43):R语言入门基础-plot绘制箱体图
  19. RAM内存 ROM存储
  20. 实验十—基本统计分析(三)

热门文章

  1. 权益对账稽核该怎么做
  2. HTML基础篇(2)
  3. 成立智能计算事业部,华为在下什么大棋?
  4. 全国高校计算机能力挑战赛初赛试题全记录
  5. freemarker的<#macro>标签理解
  6. 【BZOJ3039】玉蟾宫 单调栈
  7. c语言实现FCFS SJF算法,实现FCFS和SJF调度算法.docx
  8. 在使用macbook合并Excel表格时,系统报错。(XLRDError)
  9. 判断tvs能抗住多少千伏浪涌的依据_TVS承受浪涌电压如何计算?
  10. 企业管理内容有哪些了,分别是什么?