Hibernate with MS SQL Server 2012 问题 table 锁和并行查询
Hibernate with MS SQL Server 2012 issue with table locks and parallel query
我有一个 java 线程在事务中更新少数 tables,还有另一个线程使用只读事务读取 tables。读取 tables 的线程正在等待而不是重新调整结果,并且 returns 仅在另一个线程完成更新后。
如果数据库是 mysql,情况就不同了,更新和查询是并行发生的,没有等待。我在 MS SQL 方面遗漏了什么吗?需要做什么才能使其并行。发生这种情况是因为 table 锁在 MS Sql 服务器中。
MS Sql服务器休眠设置:
db.driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDataSource
db.dialect = org.hibernate.dialect.SQLServer2008方言
Hibernate 版本:v4.3.6.Final
连接池:HikariCP-java6 - v2.2.5
在T-SQL你可以使用UNLOCK
命令,在this link你可以看到它的完整描述。您也可以在从 table 中选择时使用 WITH (NOLOCK)
,例如:
SELECT *
FROM sample_table WITH (NOLOCK)
WHERE --conditions
但是在 Hibernate 和 MS SQL Server 中我真的不知道如何实现 NOLOCK
如果您找到解决方案,请告诉我们我会回答这个问题。
我有一个 java 线程在事务中更新少数 tables,还有另一个线程使用只读事务读取 tables。读取 tables 的线程正在等待而不是重新调整结果,并且 returns 仅在另一个线程完成更新后。
如果数据库是 mysql,情况就不同了,更新和查询是并行发生的,没有等待。我在 MS SQL 方面遗漏了什么吗?需要做什么才能使其并行。发生这种情况是因为 table 锁在 MS Sql 服务器中。
MS Sql服务器休眠设置:
db.driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDataSource
db.dialect = org.hibernate.dialect.SQLServer2008方言
Hibernate 版本:v4.3.6.Final
连接池:HikariCP-java6 - v2.2.5
在T-SQL你可以使用UNLOCK
命令,在this link你可以看到它的完整描述。您也可以在从 table 中选择时使用 WITH (NOLOCK)
,例如:
SELECT *
FROM sample_table WITH (NOLOCK)
WHERE --conditions
但是在 Hibernate 和 MS SQL Server 中我真的不知道如何实现 NOLOCK
如果您找到解决方案,请告诉我们我会回答这个问题。