2014-06-26 54 views
1

我正在運行時間(幾個小時)的過程,做插入,更新與選擇。是否有可能對使用的數據進行儘可能低的鎖定?當我的其他程序試圖對該數據進行選擇時,我認爲我在這裏遇到了一個死鎖問題。t-sql可能的死鎖解決方案

我很想在我的程序中使用select table on big table的插入/刪除/更新語句不以任何方式阻止該數據(或者至少不是用於選擇)。

會用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED解決問題嗎?我也讀過快照,但數據庫太大而無法啓動。

+1

'INSERT','UPDATE'和'DELETE'將** **始終鎖定獨家它們影響的行。如果您在單個事務中執行了超過5000個操作,那麼該鎖可能會**升級到表級別,從而阻止來自這些表的任何「SELECT」。嘗試小批量更新你的'UPDATE'等語句,並且如果有可能的話,當你的數據庫用得不多時... –

回答

0

是的,在每個查詢批次的頂部使用set transaction isolation level read uncommitted將有助於解決死鎖問題。請記住,這些將是髒讀,因爲在使用此設置時,您不會讀取任何「已提交」的事務。爲了避免在擁有高流量數據庫表的生產環境中導致死鎖問題,我使用這個語句很多。

閱讀利弊&缺點這裏使用read uncommitted的完整列表:http://sqlblog.com/blogs/tamarick_hill/archive/2013/05/06/pros-cons-of-using-read-uncommitted-and-nolock.aspx