Sql-Server
在 SQL Server 中執行推測事務
我有一個長期執行的事務,我知道它總是會被回滾。
有沒有辦法執行這個事務,這樣它就不會在數據庫中獲得任何鎖?事務插入和更新行,但這些更改永遠不會保留在數據庫中,並且通常不應該對事務之外的任何人可見。
這是一個更具體的例子。
連接1:
BEGIN TRAN UPDATE foobar SET something = 1; COMMIT
連接2:
BEGIN TRAN UPDATE foobar SET something = 2; ROLLBACK
我想防止連接 2 阻塞連接 1。我可以在事務中添加 SQL 語句,但不能輕易更改查詢。
不,在 SQL Server 中沒有執行“推測事務”的內置方法。
如果多個事務進行不兼容的更改,則會出現阻塞。您需要單獨的數據副本來避免這種情況。
我不知道您是否可以在不獲取任何鎖的情況下執行它,但您可以通過使用樂觀鎖定隔離級別(例如any
SNAPSHOT
或READ COMMITTED SNAPSHOT
隔離級別)來減少此事務獲取的鎖。一般來說,這可能會對您的數據庫產生不利影響,因此我不建議在沒有適當測試的情況下啟用這些選項中的任何一個……坦率地說,如果您要對此進行測試,您不妨測試一下您的長期 -也在生產以外的地方執行事務。