我有N個進程每隔t分鐘(N> t)向數據庫中的表A插入和更新行(多行),例如從凌晨12:00(所有N個進程)開始。我將最後一次更新時間戳保存在單獨的表B中,以檢查數據上次更新的時間。鎖定數據庫
我想讀取鎖定來檢查時間戳,看看數據是否是最新的,如果不嘗試獲取表上的鎖,更新數據庫和釋放鎖。
這可以使用linq-to-sql來完成嗎?是否有進程獲取鎖的可能性,並且由於某種原因不會釋放鎖?在那種情況下,是否有一個超時值,鎖定會自動釋放?
任何指針都會有幫助。謝謝!
我有N個進程每隔t分鐘(N> t)向數據庫中的表A插入和更新行(多行),例如從凌晨12:00(所有N個進程)開始。我將最後一次更新時間戳保存在單獨的表B中,以檢查數據上次更新的時間。鎖定數據庫
我想讀取鎖定來檢查時間戳,看看數據是否是最新的,如果不嘗試獲取表上的鎖,更新數據庫和釋放鎖。
這可以使用linq-to-sql來完成嗎?是否有進程獲取鎖的可能性,並且由於某種原因不會釋放鎖?在那種情況下,是否有一個超時值,鎖定會自動釋放?
任何指針都會有幫助。謝謝!
得到一個讀鎖,檢查時間戳,看看數據是最新的, 如果不嘗試,並在表上得到鎖,更新數據庫,並釋放 鎖。
- 一個上的時間戳獲得S鎖
- B獲得的時間戳
- A S鎖獲得X鎖:
這兩個進程試圖同時做保證僵局關於數據
A被B阻塞,B被阻塞A =>死鎖。
有發佈
這樣的行爲將是一個完整的災難,使編程交易不可能超時值之後,自動上鎖 是。你可以要求和存在的是要求鎖定放棄,如果它不能在超時獲得:SET LOCK_TIMEOUT
。
難以回答您的根本問題,因爲您提出了您的解決方案,但不是您試圖解決的實際問題。作爲數據庫中的一般評論,條件更新是以面向集合的方式通過添加適當的謂詞來完成的,例如。 UPDATE ... WHERE timestamp < @last_timestamp
並讓引擎找出如何正確實施。