SQL Server 提供完善的鎖管理機制,但鎖的取得與釋放時機幾乎完全由用戶端應用程式的查詢模式與結果處理方式決定。應用設計稍有不當,即引發嚴重阻塞。
ROLLBACK,已取得的鎖持續保留,導致後續查詢阻塞。切勿為「提高回應速度」而部分讀取。若需分頁,使用 OFFSET/FETCH 或 ROW_NUMBER() 在伺服器端完成,避免游標停留。
等待使用者輸入會成倍拉長交易持續時間。所有參數應在交易啟動前備妥(透過變數、暫存表預載)。
例:200 萬筆產品資料需更新 150 萬筆。
❌ 單一交易全量更新(鎖定數小時)。
✅ 依產品分類分批更新,每批次交易秒級完成,間隔釋放鎖。
報表查詢導向唯讀複本、資料倉庫或快照隔離資料庫,隔離寫入負載。
sys.dm_tran_locks、sys.dm_os_waiting_tasks 即時阻塞鏈分析。blocked_process_report 持久化記錄。READ_COMMITTED_SNAPSHOT 減少讀寫衝突。LOCK_TIMEOUT 避免無限等待。TABLOCK 提示主動升級表鎖,減少鎖升級開銷。