Sql-Server

在 SQL Server 中執行推測事務

  • October 4, 2017

我有一個長期執行的事務,我知道它總是會被回滾。

有沒有辦法執行這個事務,這樣它就不會在數據庫中獲得任何鎖?事務插入和更新行,但這些更改永遠不會保留在數據庫中,並且通常不應該對事務之外的任何人可見。

這是一個更具體的例子。

連接1:

BEGIN TRAN
UPDATE foobar SET something = 1;
COMMIT

連接2:

BEGIN TRAN
UPDATE foobar SET something = 2;
ROLLBACK

我想防止連接 2 阻塞連接 1。我可以在事務中添加 SQL 語句,但不能輕易更改查詢。

不,在 SQL Server 中沒有執行“推測事務”的內置方法。

如果多個事務進行不兼容的更改,則會出現阻塞。您需要單獨的數據副本來避免這種情況。

我不知道您是否可以在不獲取任何鎖的情況下執行它,但您可以通過使用樂觀鎖定隔離級別(例如anySNAPSHOTREAD COMMITTED SNAPSHOT 隔離級別)來減少此事務獲取的鎖。一般來說,這可能會對您的數據庫產生不利影響,因此我不建議在沒有適當測試的情況下啟用這些選項中的任何一個……坦率地說,如果您要對此進行測試,您不妨測試一下您的長期 -也在生產以外的地方執行事務。

引用自:https://dba.stackexchange.com/questions/186969