如何解决Microsoft SQL Server数据库死锁问题
Exception is org.springframework.dao.CannotAcquireLockException: could not execute query; SQL ; nested exception is org.hibernate.exception.LockAcquisitionException: could not execute query] with root cause
com.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.
为了解决这个问题,我们为数据库启用了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;
相关文章