gpt4 book ai didi

java - 消除读取和写入数据时sql server 2008的死锁问题

转载 作者:行者123 更新时间:2023-12-01 15:35:59 26 4
gpt4 key购买 nike

java.sql.BatchUpdateException: Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

我有两个java应用程序,一个从sybase读取数据并写入sql server 2008,另一个从sql server 2008表读取数据并将其写入其他表。现在这两个应用程序运行良好。但我有很多人从 mssql 表访问数据,其中第二个应用程序每 30 秒更新一次数据。所以我得到了上面的异常。我在 stackoverflow 中看到了类似的线程,但是 Deadlock troubleshooting in Sql Server 2008我对此处提供的解决方案有疑问

row versioning

我可以使用 rowversioning 来避免在我的情况下出现死锁吗?我该如何使用它?

编辑

    String selectAllQuery = "Select new_site_id from GIS.MAP.ro";    
String selectQuery = "Select siteId from GIS.MAP.status where AlarmCode in ('1','2','3') and localNodeAlias like 'FLM%'";

String updateQuery = "update GIS.MAP.ro set active_site_status = ? where new_site_id = ?";
String updateAllQuery = "update GIS.MAP.ro set active_site_status = site_status where new_site_id = ?";

因此,我从 GIS.MAP.status 表中进行选择并更新 GIS.MAP.ro 表。实际上 GIS.MAP.status 表也是每 30 秒更新一次(整个表被删除和插入,但两个任务

  1. 首先插入 GIS.MAP.status,然后进行事务处理 promise
  2. 其次是更新 GIS.MAP.ro 表和事务已 promise
  3. 最后,来自 GIS.MAP.ro 的数据被许多用户通过第三方应用程序访问。实际上在这个例子中发生了死锁。

最佳答案

在大多数情况下,死锁表明您的实现存在问题 - 查询顺序、锁定顺序或连接顺序存在问题。我建议收集并分析您的死锁 ( MSDN: Analyzing Deadlocks with SQL Server Profiler ),以便您可以找到代码中发生死锁的确切位置并修复它们。

关于java - 消除读取和写入数据时sql server 2008的死锁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com