sys.dm_tran_current_transaction (Transact-SQL)
傳回一個顯示目前工作階段交易之狀態資訊的資料列。
語法
sys.dm_tran_current_transaction
傳回的資料表
資料行名稱 |
資料類型 |
描述 |
---|---|---|
transaction_id |
bigint |
目前快照集的交易識別碼。 |
transaction_sequence_num |
bigint |
產生記錄版本之交易的序號。 |
transaction_is_snapshot |
bit |
快照集隔離狀態。如果交易是在快照集隔離下啟動,這個值就是 1。否則,這個值便為 0。 |
first_snapshot_sequence_num |
bigint |
產生快照集時作用中交易的最低交易序號。執行時,快照集交易會產生當時所有作用中交易的快照集。如果是非快照集交易,此資料行會顯示 0。 |
last_transaction_sequence_num |
bigint |
全域序號。這個值代表系統所產生的最後一個交易序號。 |
first_useful_sequence_num |
bigint |
全域序號。這個值代表最舊的交易序號,而這種交易具有必須保留在版本存放區的資料列版本。您可以移除先前交易建立的資料列版本。 |
權限
需要伺服器的 VIEW SERVER STATE 權限。
範例
下列範例使用的測試案例中有四筆並行交易正在 ALLOW_SNAPSHOT_ISOLATION 和 READ_COMMITTED_SNAPSHOT 選項都設為 ON 的資料庫中執行,而每一筆交易都由一個交易序號 (XSN) 識別。正在執行的交易包括:
XSN-57 是在可序列化隔離下執行的更新作業。
XSN-58 與 XSN-57 相同。
XSN-59 是在快照集隔離下執行的選取作業。
XSN-60 與 XSN-59 相同。
下列查詢是在每項交易的範圍內執行。
SELECT
transaction_id
transaction_sequence_num
transaction_is_snapshot
first_snapshot_sequence_num
last_transaction_sequence_num
first_useful_sequence_num
FROM sys.dm_tran_current_transaction;
以下為 XSN-59 的結果。
transaction_id transaction_sequence_num transaction_is_snapshot
-------------------- ------------------------ -----------------------
9387 59 1
first_snapshot_sequence_num last_transaction_sequence_num
--------------------------- -----------------------------
57 61
first_useful_sequence_num
-------------------------
57
此輸出顯示 XSN-59 是快照集交易,其使用 XSN-57 作為 XSN-59 啟動時使用中的第一項交易。這表示 XSN-59 會讀取交易序號低於 XSN-57 之交易所認可的資料。
以下為 XSN-57 的結果。
transaction_id transaction_sequence_num transaction_is_snapshot
-------------------- ------------------------ -----------------------
9295 57 0
first_snapshot_sequence_num last_transaction_sequence_num
--------------------------- -----------------------------
NULL 61
first_useful_sequence_num
-------------------------
57
由於 XSN-57 並不是快照集交易,因此 first_snapshot_sequence_num 是 NULL。