Sql-Server

未送出的事務更新列;不同的交易如何看到舊的列值?

  • May 15, 2019

讓我們假設以下情況。

有一個students表:

編號 | 姓名
-----------------
1 | 馬特烏斯

“使用者 A”在不送出事務的情況下執行以下語句:

update students set name = 'Gustavo' where id = 1

然後“使用者 B”執行以下查詢:

select * from students with (nolock) where id = 1

使用者 B 將獲得 name Gustavo,這是預期的行為。DB會因為with(nolock)指令返回未送出的值。

Mateus即使有未送出的事務,有沒有辦法獲取舊名稱(先前送出的值)?

您可以在數據庫上使用 Read Committed Snapshot Isolation (RCSI),它使用 TempDB 中的空間來跟踪數據的已送出版本。

請注意,RCSI 為每個版本化的行添加 14 個字節,因此您可能會在數據庫中看到一些額外的頁面拆分。它還要求監視 TempDB 的空間和 I/O,以確保它不會減慢速度。

閱讀更多由Paul White和在這個問題中。

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