【问题标题】:Simultaneous reads and writes on different rows of the same table in SQL ServerSQL Server 同一张表的不同行同时读写
【发布时间】:2018-09-03 08:40:14
【问题描述】:

我的 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 实现吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您帮助我!刚刚赞成你的答案。
    • @curious1,性能和避免阻塞/死锁齐头并进。如果您的查询使用适当的索引进行了调整,以便仅触及所需的行,则无需借助提示即可减轻阻塞/死锁的可能性。
    • @DanGuzman,感谢您的参与!来自经验丰富的人的好建议!
    猜你喜欢
    • 2013-03-15
    • 2014-10-19
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2021-06-16
    • 2018-02-04
    • 2018-01-12
    • 2021-02-28
    相关资源
    最近更新 更多