绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
如何解决Microsoft SQL Server数据库死锁问题
2022-03-30 14:03:18
使用Microsoft SQL Server在Java Spring Boot时如果应用程序中处理数据库死锁,错误如下所示:
Exception is org.springframework.dao.CannotAcquireLockException: could not execute query; SQL ; nested exception is org.hibernate.exception.LockAcquisitionException: could not execute query] with root causecom.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 132) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
当用户上传正在写入数据库的文件时,数据库死锁导致。当上传文件时,用户导航到另一个页面,在那里查询来自同一个表的数据。
在调试SQL Server跟踪时,我们发现行级锁升级为表锁。这将导致SQL Server停止其他事务访问该表。

为了解决这个问题,我们为数据库启用了READ_COMMITTED_SNAPSHOT选项,以便它使用READ_COMMITTED和行版本隔离策略。在SQL Server中,默认的数据库隔离级别是READ_COMMITTED,这意味着当前事务中的查询不能读取其他事务修改的数据,而其他事务还没有提交,从而防止脏读。隔离级别使用共享锁定或行版本控制来防止脏读,这取决于READ_COMMITTED_SNAPSHOT数据库选项是否启用。

由于wee启用了READ_COMMITTED_SNAPSHOT, SQL Server将使用版本控制而不是锁。

ALTER DATABASE <database name>   SET READ_COMMITTED_SNAPSHOT ON   WITH ROLLBACK IMMEDIATE;
来源 | DZone
作者 | shekhargulati
编辑 | LENA
来源 https://mp.weixin.qq.com/s/mhTcPuZJAXZmqCwKWvCjyQ
分享好友

分享这个小栈给你的朋友们,一起进步吧。

Microsoft SQL Server
创建时间:2022-03-30 11:29:11
Microsoft SQL Server
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~