并发错误:事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品
这个是并发情况下导致的数据库事务错误,先介绍下背景。
背景
springboot+springmvc+sqlserver+mybatis
一个controller里有五六个接口,这些接口都用到了spring的事务管理,这些接口单个调用的时候都很正常,当我模拟几十个并发请求这些接口的时候,总会有一两次的mybatis的持久化操作会出错,具体错误:
nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.reflect.UndeclaredThrowableException
### The error may involve com.xxxxxxxxx-Inline
### The error occurred while setting parameters
### SQL: update xxxx set ccccc = ? ,jid = ? ,status = ? where bcode=? and status != 0
### Cause: java.lang.reflect.UndeclaredThrowableException
根据提示的这个UndeclaredThrowableException,到网上搜索都是说mybatis的映射文件里的字段属性与model里的写的不一致。
但是如果是写法不对的话,应该每次请求的都报错啊,现在是几十次里只有一两次报错,肯定不是这个原因。
在网上搜了半天,无果,于是把代码放到服务器上再模拟并发测试一下,还是会有一两次报错,不过这次报的错就很明朗了
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID 62)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
### The error may exist in file [E:\kkkkk\xxxMapper.xml]
### The error may involve com.xxxxx.ppppp
### The error occurred while handling results
### SQL: SELECT b.* FROM xxxxx a RIGHT JOIN ooooo b ON a.GId = b.id where a.bcode = ''
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID 62)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
; SQL []; 事务(进程 ID 62)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID 62)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
原来是并发引起的数据库事务报错,具体原因和修改看这篇:对于spring中事务@Transactional注解的理解
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我了解了一下事务处理机制,原来这个错误是在数据库中抛出的。因为不同线程在事务中处理相同的数据时,数据库会采取让一个执行而另一个放弃执行,于是就出现上面的错了。之所以插入不容易出现这个错误,是因为插入的速度快,不容易出现。同时如果修改的时候按照条件修改数据速度就会慢,如果按照主键或索引修改速度就会快,也不容易出现这个错误。@xmt1139057136,虽然没给具体的方法确实是按照这个思路想出来的,谢谢啦。对了,我对TOMCAT在局域网内进行压力测试时,发现速度明显比本地慢的多,而且无法处理并发1000条了(本机是可以的),向请教一下。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解决方法
2.把事务的隔离级别改为宽松的,read_uncommited
并发错误:事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品的更多相关文章
- 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案|事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务
前言: 由于网站访问压力的问题,综合分析各种因素后结合实际情况,采用数据库读写分离模式来解决当前问题.实际方案中采用“事务发布”模式实现主数据库和只读数据库的同步,其中: 发布服务器1 ...
- 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。
访问频率比较高的app接口,在后台写的异常日志会偶尔出现以下错误. 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 实所有的死锁最深层的原因就是一个 ...
- C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别
C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye { //私有的构造函数,保证外部不能实例化 private ...
- Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)
1.Kettle做了一个作业, 执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁.(我的理解是既然都分开作业了,那么每个作业都是一个单 ...
- SQL Server死锁问题:事务(进程 ID x)与另一个进程被死锁在 锁 | 通信缓冲区资源上并且已被选作死锁牺牲品。请重新运行该事务。
### The error occurred while setting parameters### SQL: update ERP_SCjh_zzc_pl set IF_TONGBU=1 where ...
- 如何按名称或PID查找一个进程?如何按端口号查找一个进程?如何查看一个进程的CPU和内存、文件句柄使用情况?如何查看CPU利用率高的TOP10进程清单?如何根据PID强制终止进程?
如何按名称或PID查找一个进程?如何按端口号查找一个进程?如何查看一个进程的CPU和内存.文件句柄使用情况?如何查看CPU利用率高的TOP10进程清单? 目录 如何按名称或PID查找一个进程?如何按端 ...
- linux -- 进程的查看、进程id的获取、进程的杀死
进程查看 ps ax : 显示当前系统进程的列表 ps aux : 显示当前系统进程详细列表以及进程用户 ps ax|less : 如果输出过长,可能添加管道命令 less查看具体进程, 如:ps a ...
- Linux下查找进程id并强制停止进程的脚本
Linux下的tomcat的停止脚本shutdown.sh经常失败,造成tomcat进程没关闭.所以只能手动查找进程id,然后用kill命令来强制停止.每次都要这样查一下,然后再杀进程.感觉有点麻烦, ...
- CMD查看进程ID并查杀进程
开始-运行,输入CMD打开命令行界面,输入命令netstat -ano 结束该进程C:\>taskkill /f /t /im Wiz.exe 根据进程ID杀 >taskkill /F / ...
随机推荐
- Write with Vim (1)
Write with Vim (1) 本文出自Svitter的blog 原文在之前的也曾发表 大约在一年前使用vim?这个也是个不确定的时间.具体什么时间使用Vim早已经忘记了. 现在用的还算顺手,但 ...
- android的布局-----FrameLayout(帧布局)
(-)帧布局简介 帧布局容器为每个加入的其中的组件创建一个空白的区域称为一帧每个子组件占据一帧,这些帧都会根据gravity的属性执行自动对齐 (二)属性 foreground:这是帧布局的前景图像 ...
- springBoot AOP环绕增强、自定义注解、log4j2、MDC
(一)log4j2 maven配置 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- [开源] FreeSql AOP 功能模块
前言 FreeSql 是一个功能强大的 .NETStandard 库,用于对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.6.1+(QQ群:4336 ...
- eclipse 重构代码自动抽取函数
1.选择重构代码段 2.重构 – 抽取方法 3.命名重构代码段抽取的方法 4.使用抽取的方法
- HTTP 状态消息 [转]
转自:https://www.cnblogs.com/wuyongyu/p/5745875.html HTTP 状态消息 ...
- Mac 安装brew和安装composer
一.安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...
- Laravel 时间处理
$info['date'] = $item->created_at->diffForHumans();//友好时间显示 $info['date'] = $item->created_ ...
- java 相关软件使用趋势
http://www.baeldung.com/java-in-2017 https://mp.weixin.qq.com/s?__biz=MzI4NjYwMjcxOQ==&mid=224 ...
- 调试SQLSERVER (一)生成dump文件的方法
http://www.cnblogs.com/lyhabc/p/4184149.html http://www.cnblogs.com/lyhabc/p/4185399.html