Поделиться через


sys.dm_tran_current_transaction

Возвращает строку, которая отображает сведения о состоянии транзакции в текущей сессии.

Синтаксис

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 на сервер.

Примеры

В следующем примере используется тестовый сценарий, в котором четыре параллельные транзакции, каждую из которых идентифицирует порядковый номер (XSN), выполняются в базе данных с параметрами ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT, установленными в значение ON. Выполняются следующие транзакции:

  • 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.