在SQL Server中同一表的不同行同时读取和写入

时间:2018-03-24 22:17:06

标签: sql-server jpa spring-data-jpa

我的Web应用程序在Spring(MVC)4.2.9.RELEASE,Hibernate 5.1.3.Final,Spring Data 1.8.2.RELEASE和MS SQL Server Enterprise 2014(两个集群虚拟机和AlwaysOn)上运行。

应用程序经常在一个表上读写。但是,所有读取和写入总是发生在不同的行(记录)上。换句话说,永远不会有同时在同一行上发生两次或多次读取或写入的时间。

如何通过JPA配置此表以确保此表中某行的写入或读取不会阻止同一表上的其他同时读取和写入?例如,两个写入可以同时在表上执行,因为它们从不在同一行上写入。基本上,我想提高网站的性能,减少死锁的可能性。

这可以通过JPA实现吗?

1 个答案:

答案 0 :(得分:1)

锁定为quite complicated。可能,SQL Server每页锁定您的表。这意味着对一个页面的写入不会阻止对其他页面的读取。

最佳做法是monitor the logs for deadlocks。如果没有发生死锁,则无需自定义锁定。如果发生死锁,您将遇到一个特定的问题需要解决。解决方案可能涉及使用table hints修改查询,配置SQL Server或更改逻辑。但如果不了解细节,那是不可能的。