我想知道下面的正確解決方案是什麼。在生產中運行更新語句時鎖定行
我在T-SQL中有一個UPDATE
語句,需要作爲日常任務運行。該過程將更新一個表中的一個位列。受影響的行數約爲30,000。
在T-SQL
UPDATE TABLE_NAME
SET BIT_FIELD = [dbo].[FUNCTION](TABLE_NAME.ID)
WHERE -- THIS ISN'T RELEVANT
確定真或假基本上運行幾個支票和打約3其他表中的功能的僞版本。目前該程序需要大約30分鐘的時間才能在我們的開發環境中運行和更新30,000行。我期待這在生產上翻一番。
我遇到的問題是間歇性地鎖定了TABLE_NAME
表。如果我以1000的批次運行它,似乎可以,但如果我增加它,它似乎運行良好,但最終表鎖定。唯一的解決方法是取消導致沒有行被更新的查詢。
請注意,該過程未包含在TRANSACTION中。
如果我在單獨的UPDATE
聲明中運行每個更新,這個問題會解決嗎?在實時環境中更新大量記錄時,什麼是一個好的解決方案?
任何幫助將不勝感激。
謝謝!
您是否已將鎖升級爲表鎖? –
函數是否也從TABLE_NAME讀取? – JStead
嗨馬丁和JStead。感謝您及時的回覆。 回答馬丁的問題..我沒有。當我認爲發生鎖定時,我可以通過針對不同的列運行簡單選擇來測試這一點嗎? JStead - 函數確實從TABLE_NAME讀取。 謝謝兩位 –