我有每5分鐘運行一次的進程A,需要在表「EventLog」中寫入一些內容。這一整天都在工作,但是晚上還有另一個B進程,需要從這個表中刪除大量的舊數據。該表具有數百萬行(包括斑點)和許多相關表(由級聯刪除),因此過程B運行時間大約爲45分鐘。雖然進程B正在運行,但進程A出現很多死鎖警告,我想擺脫這些。TransactionScope優先級(擺脫死鎖情況)
簡單的選項是「當進程B運行時不要運行進程A」,但必須有更好的方法。我在兩個進程中都使用EntityFramework 6和TransactionScope。我沒有找到如何設置優先級或類似的東西在我的進程。這可能嗎?
編輯: 我忘了說,我已經在使用每一個記錄刪除事務,所有記錄不是一個事務。在內部循環中,我創建了新的DBContext和TransactionScope,因此每個記錄都有自己的事務。我的問題是刪除記錄仍然需要一些時間,因爲相關的BLOB和其他相關表中的數據(可以說每行約5秒)。當刪除過程(B)與插入過程(A)交叉時,我仍然遇到死鎖情況。
如果他們都有一定的時間,你能對齊他們嗎?如果A需要1分鐘才能完成,並且從20:00開始,那麼你可以在20:03開始B? – Kuzgun
B在一次交易中沒有理由需要45分鐘。刪除可以在少於30秒的交易中以較小尺寸的循環完成。解決超時問題。 – TomTom