iT邦幫忙

0

事務(進程 ID )與另一個進程被死鎖在 鎖 資源上,並且已被選作死鎖犧牲品。請重新運行該事務?

sql
  • 分享至 

  • xImage

SQL Server 在差不多1000人用戶使用的公司常會出現此錯誤,導致用戶需要重複操作一次
請問如何避免更新時,同時有其他人在使用導致報錯
是否能改成不馬上報錯,改成等待別人完成時再更新?

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2023-05-19 15:22:24 檢舉
叫原廠出來排錯,dead lock是系統問題,程式不是我們寫的,能給什麼建議?給了建議你還是得找原廠才能改問題啊。
player iT邦大師 1 級 ‧ 2023-05-20 15:52:50 檢舉
應該是交易機制沒寫好
變成多個SQL 連線
同時在鎖定共用資源
變成互相等待對方完成釋放共用資源的死鎖
這種需要原廠修改架構
導入MQ 排隊去做
西撒 iT邦新手 5 級 ‧ 2023-05-20 16:13:29 檢舉
程式碼是你們寫的嗎?
死鎖四個條件, 同時滿足才會死鎖
我個人感覺 sql 操作, 只能想辦法排除**循環條件**, 需要對程式碼進行侵入性修改
1.互斥
2.等待
3.搶佔
4.循環
小MIS iT邦研究生 1 級 ‧ 2023-05-22 09:17:59 檢舉
是,是我們自己開發的
>是,是我們自己開發的
那,你是此程式的開發、維護小組成員嗎?
還是開發、維護的工程師另有其人?
小MIS iT邦研究生 1 級 ‧ 2023-05-22 10:58:01 檢舉
我就是可憐的開發人員 (Orz...)
把原文錯誤「transaction (process id ) is deadlocked on the lock resource with another process and has been selected as the deadlock victim. please re-run the transaction?」拿去估狗,可以找到一些國外論壇的說明,你可以去估狗看看。
froce iT邦大師 1 級 ‧ 2023-05-22 14:31:09 檢舉
https://learn.microsoft.com/zh-tw/sql/relational-databases/sql-server-deadlocks-guide?view=sql-server-ver16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
sam0407
iT邦大師 1 級 ‧ 2023-05-24 16:49:37
最佳解答

我知道有幾種簡單的解法,建議您先用Profiler觀察幾天確定經常發生被鎖定的Table及SQL指令是那些,您才好視不同情況用不同的解法:
1.Dirty Read:針對一些對查詢結果要求不是很精確場景可以使用,作法也最簡單,在select指令後加個with nolock就可以了。(温馨提示:慎用!!財會系統絕對不要使用,除非您想被火了)

2.讀寫分離:多加一台資料庫主機,與原資料庫作複寫,查詢/報表都指定到另一台去撈資料,這個作法也不難吧?最難的部份應該是要有錢買主機~~

3.分析SQL指令並調整程式架構:這個方法工作量最大難度最高,也是工程師的最佳解,但以我個人對原Po印象中的公司生態,還是算了吧!ERP能跑不死機就好~

我要發表回答

立即登入回答