问题:System.Exception: 事务(进程 ID 321)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务

死锁最深层的原因就是一个:资源竞争

表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A

这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.

表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释
放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....

转载于:https://www.cnblogs.com/One-dream-man/p/3260221.html

关于sql 资源竞争死锁现象相关推荐

  1. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

  2. linux将程序锁死,Linux死锁现象及分析方法(转)

    本节我们对Linux死锁做一个基本的介绍,然后讲解如何检测并定位死锁. 1. 什么是死锁? 死锁(DeadLock)是指两个或者两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象 ...

  3. 仅4步,就可通过SQL进行分布式死锁的检测与消除

    摘要:本文主要介绍在 GaussDB(DWS) 中,如何通过 SQL 语句,对分布式死锁进行检测和恢复. 分布式数仓应用场景中,我们经常遇到数据库系统 hang 住的问题,所谓 hang 是指虽然数据 ...

  4. Thinking in Java---从哲学家就餐问题看死锁现象

    我们知道一个对象可以有synchronized方法或其他形式的加锁机制来防止别的线程在互斥还没释放的时候就访问这个对象.而且我们知道线程是会变成阻塞状态的(挂起),所以有时候就会发生死锁的情况:某个任 ...

  5. Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)

    文章目录 系列目录 原项目地址 第34课:Python中的并发编程-1 线程和进程 多线程编程 使用 Thread 类创建线程对象 继承 Thread 类自定义线程 使用线程池 守护线程 资源竞争 G ...

  6. python全栈开发第36天------GIL全局解释锁、死锁现象和递归锁、信号量、Event事件、线程...

    一.GIL全局解释锁 定义:本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一个进程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,无法并行 用途:因为Cpytho ...

  7. 解决SQL server2005数据库死锁的经验心得

    前段时间提到的"sql server 2005 死锁解决探索",死锁严重,平均每天会发生一次死锁,在解决和处理SQL server2005死锁中查了很多资料和想了很多办法,后来我们 ...

  8. Python并发编程:多线程-死锁现象与递归锁

    一 死锁现象 所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...

  9. sql活动监视器 死锁_监视SQL Server死锁–简单方法

    sql活动监视器 死锁 SQL Server is a very powerful tool and wherever I go, I see the tool being way much unde ...

最新文章

  1. Win2000 Win2003安装卡巴斯基6.0
  2. Android Service 之 AIDL
  3. java的imshow方法_如何在循环中使用子图,imshow或图形来显示所有图像?
  4. 【java.lang.UnsupportedClassVersionError】版本不一致出错
  5. 8086CPU汇编寻址写法
  6. OPPO Reno配置曝光 骁龙855+10倍混合光学变焦
  7. mri计算机系统,MRI设备
  8. python sql查询返回记录_干货!Python与MySQL数据库的交互实战
  9. 文件系统中,Path和Directory的区别
  10. Flutter Image 参数详解
  11. python except exception_try except Exception 异常处理
  12. 我的世界修改服务器头像,我的世界头像
  13. vue+element 压缩上传图片
  14. python获取pdf页面尺寸_python-从pdf提取页面作为jpeg
  15. [ArcGIS] 空间分析(八) 水文分析
  16. 香港银行开户请尽早!附最全开户攻略
  17. JeeCms使用笔记
  18. python中execute函数_python中的函数是如何使用的?
  19. RFID复习笔记(1)——物联网与RFID概述
  20. t.l346y.cn.php,Dell EMC PowerEdge T340 离线安装 LNMP 环境

热门文章

  1. NSIS:IfFileExists+Goto实现简单跳转
  2. 蓝桥杯 ADV-208 算法提高 矩阵相乘
  3. echarts里面的参数解释_SPMSM控制:传统PI速度环参数的整定
  4. Javascript获取select下拉框选中的的值
  5. tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListen
  6. spring boot 处理自定义注解
  7. 基于Fork/Join框架实现对大型浮点数数组排序(归并算法和插入排序算法) 1
  8. jq获取页面url后边带的参数
  9. 运算放大器相关参数基本知识(一)
  10. xcode 不值钱的动画UIButton