簡體   English   中英

消除讀寫數據時SQL Server 2008的死鎖問題

[英]removing deadlock issue with sql server 2008 while reading and writing data

java.sql.BatchUpdateException:事務(進程ID 58)與另一個進程在鎖資源上發生死鎖,並且被選擇為死鎖犧牲品。 重新運行事務。

我有兩個Java應用程序,一個從sybase讀取數據並寫入sql server 2008,另一個從sql server 2008表讀取數據並將其寫入其他表。 現在,這兩個應用程序可以正常工作。 但是我有很多人從mssql表訪問數據,第二個應用程序每30秒更新一次數據。 所以我得到了上面的例外。 我在stackoverflow中看到了類似的線程,但是在Sql Server 2008中進行了死鎖故障排除,我在這里提出的解決方案有問題

行版本控制

可以使用rowversion來避免出現死鎖,如何使用它?

編輯

    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並提交事務
  2. 更新GIS.MAP.ro表次之,事務已提交
  3. 最后,許多用戶通過第三方應用程序訪問GIS.MAP.ro中的數據。 實際上,在這種情況下會出現僵局。

在大多數情況下,死鎖表明您的實現存在問題-查詢順序,鎖定順序或連接順序存在問題。 我建議收集並分析您的死鎖( MSDN:使用SQL Server Profiler分析死鎖 ),以便您可以在代碼中找到發生死鎖的確切位置並進行修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM