死锁的概念

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。

常见的死锁场景

场景一:A线程update记录1,此时锁住了记录1;B线程update记录2,此时锁住记录2;然后A线程读取记录2,此时等待记录2的释放;然后B线程读取记录1,此时等待记录1的释放。这就构成了循环等待的过程,导致死锁的产生。

场景二:如果在事务中执行了一条不满足条件的update语句,则执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行后,就很容易产生死锁和阻塞。类似的情 况还有当表中的数据量非常庞大而索引建的过少或不合适的时候,使得经常发生全表扫描,最终应用系统会越来越慢,最终发生阻塞或死锁。

场景三:用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条纪录,这时用户A的事务里锁的性质由查询的共享锁企图上升到独占锁,而用户B里的独占锁由于A 有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。这种死锁比较隐蔽,但在稍大点的项 目中经常发生。如在某项目中,页面上的按钮点击后,没有使按钮立刻失效,使得用户会多次快速点击同一按钮,这样同一段代码对数据库同一条记录进行多次操 作,很容易就出现这种死锁的情况。

Mysql排查死锁

死锁日志的解读和分析

避免死锁的方案

1、对于数据库的多表操作时,尽量按照相同的顺序进 行处理,尽量避免同时锁定两个资源,如操作A和B两张表时,总是按先A后B的顺序处理, 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。

2、所有的update和delete操作必须走唯一索引

3、SQL语句中不要使用太复杂的关联多表的查询;使用“执行计划”对SQL语句进行分析,对于有全表扫描的SQL语句,建立相应的索引进行优化。

4、把SELECT放在Update语句前

5、避免事务中的用户等待交互

数据库死锁常见场景以及排查解决方案相关推荐

  1. 一次诡异的数据库死锁问题排查过程

    GitHub 1.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 1.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 1.8k Star 的 ...

  2. 一次诡异的数据库死锁问题排查过程 1

    GitHub 1.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 1.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 1.8k Star 的 ...

  3. 【已解决】数据库常见场景应用计算次日留存率

    记录一个数据库中常见的应用场景,需要计算用户次日留存率(次留分析),查询出计算的用户留存率. 结合这个应用背景,牛客网站上的 SQL29 计算用户的平均次日留存率 非常适合拿来练习,下面就以牛客上的这 ...

  4. 数据库死锁产生原因及场景

    什么是数据库死锁? 两个或以上事务同时对一批资源占用锁,并形成循环,就会造成事务死锁,一般报错如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionR ...

  5. 雪崩效应及其常见场景和解决方案

    一.什么是雪崩效应? 在分布式系统架构中,多个系统之间通常是通过远程 RPC 调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统服务等(实现方式有 Spring Boot + D ...

  6. SqlServer数据库死锁排查方法

    1. 开启数据库死锁日志功能 1.1 在SQLSERVER企业管理器里执行下面 a 命令,开启死锁日志 --a. 开启跟踪死锁 DBCC TRACEON(3605,1204,1222,-1) --b. ...

  7. 研发协同平台数据库死锁处理及改进

    源宝导读:数据库死锁是高并发复杂系统都要面临课题,处理死锁问题没有一招制敌的标准方法,需要具体问题具体分析.本文将基于研发协同平台遇到的死锁案例,介绍从监控.分析到处理的完整过程和经验总结. 一.背景 ...

  8. 数据库死锁及解决办法

    文章目录 1. 事务之间对资源访问顺序的交替 2. 并发修改同一记录 3. 索引不当导致的死锁 目前,我们已经探讨了许多关于数据库锁的问题,锁能够有效地解决并发的问题,但这也带来了一个严重的缺点,那就 ...

  9. 2场直播丨MySQL 数据库最常见的 6 类故障的排除方法、2020数据技术嘉年华·金融峰会暨数据库大咖讲坛(第4期)...

    一.MySQL 数据库最常见的 6 类故障的排除方法 - 2020年11月12日 20:00 - 2020年11月12日 21:00 MySQL 无法启动?MySQL 连接不上?MySQL 挂起(hu ...

最新文章

  1. Java创建数组的三种方法
  2. Linux 基础知识(十)DNS服务器主从复制,子域授权
  3. Apache地址重写的几个问题
  4. 边锋游戏:用精细化运营使游戏流失率降低 26% ,只是数据驱动价值的冰山一角...
  5. Qt添加对Android的OpenSSL支持
  6. Pixhawk的传感器数据(陀螺、加计等)流程
  7. JAVA进阶day05包和权限
  8. linux tcp cork,Socket选项系列之TCP_CORK(转)
  9. android电池充电动画,Android 开机充电图标和充电动画效果
  10. 老板亲戚来公司实习,差点把公司的Tomcat搞崩了,就因为不会部署Java服务
  11. Error: Invalid or corrupt
  12. 无效内存引用_10.swift5-常见语法及内存管理
  13. python flask token_Flask 用户名密码登录获取token
  14. EXCEL合并单元格内容并换行显示
  15. Shell和Python中的“正三角”和“倒三角”
  16. 2021-08-04 jQuery基础整理 17-30 代码复制即可运行
  17. 【世界数学难题】21世纪世界七大数学难题简介
  18. 用java下载html页面
  19. Revit安装失败怎样卸载重新安装Revit,解决Revit安装失败的方法总结
  20. select_shape算子的使用与特性

热门文章

  1. 交互设计学习心得体会
  2. (连载)词向量的理解——词嵌入向量(word embedding)
  3. mysql innodb 聚簇_MySQL InnoDB 聚簇索引和非聚簇索引
  4. Xcode 配置python环境
  5. 对京东集团2021年运营状况进行财务分析
  6. python主要学那个方向好_学好Python的10种方向,你选择好了吗?
  7. OBS在双显卡笔记本上捕获不到显示器(窗口黑屏)
  8. allergro音乐术语什么意思_音乐术语Allegro的中文含义是()。A.慢板B.快板C.中板D.急板...
  9. 小米10新品发布会,AIoT时代,必须了解的前沿高端技术
  10. ●●教你如何在鼠标右键中添加excel,word,ppt的快捷方式