sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
В экземпляре SQL Server это динамическое административное представление возвращает виртуальную таблицу всех активных транзакций, формирующих или потенциально получающих доступ к версиям строк. Транзакции включаются для одного или нескольких из следующих условий.
Если одному или обоим параметрам базы данных ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT присвоены значения ON.
Для каждой транзакции имеется одна строка, запускающаяся на уровне изоляции моментальных снимков либо на уровне READ COMMITTED с использованием управления версиями строк.
Для каждой транзакции имеется одна строка, вызывающая создание версии строки в текущей базе данных. Например, транзакция формирует версию строки путем обновления или удаления строки из текущей базы данных.
При срабатывании триггера имеется одна строка для транзакции, в которой выполняется триггер.
При запуске процедуры индексирования в сети имеется одна строка для транзакции, которая создает индекс.
При включенном режиме MARS имеется одна строка для каждой транзакции, которая получает доступ к версиям строк.
Это динамическое административное представление не включает в себя системные транзакции.
Синтаксис
sys.dm_tran_active_snapshot_database_transactions
Возвращаемая таблица
Имя столбца |
Тип данных |
Описание |
---|---|---|
transaction_id |
bigint |
Уникальный идентификатор, присвоенный транзакции. Идентификатор транзакции используется главным образом для определения транзакции при операциях блокировки. |
transaction_sequence_num |
bigint |
Порядковый номер транзакции. Порядковый номер транзакции является уникальным и присваивается транзакции в момент ее запуска. Транзакции, которые не создают записи версий и не используют сканирование моментальных снимков, не получат порядковый номер. |
commit_sequence_num |
bigint |
Порядковый номер, который указывает, когда транзакция заканчивается (фиксируется или останавливается). Для активных транзакций значение равно NULL. |
is_snapshot |
int |
0 = транзакция, отличная от изоляции моментального снимка. 1 = транзакция изоляции моментального снимка. |
session_id |
int |
Идентификатор сеанса, в рамках которого была инициирована транзакция. |
first_snapshot_sequence_num |
bigint |
Наименьший последовательный номер транзакции, которая была активна во время формирования моментального снимка. При выполнении транзакции моментального снимка она формирует моментальный снимок активных в этот момент транзакций. Для транзакций, не связанных с моментальными снимками, в этом столбце отображается 0. |
max_version_chain_traversed |
int |
Максимальная длина цепочки версий, пройденной в поисках транзакционно согласованной версии. |
average_version_chain_traversed |
real |
Среднее число версий строк по всем пройденным цепочкам версий. |
elapsed_time_seconds |
bigint |
Время, истекшее с момента, когда транзакция получила свой порядковый номер. |
Разрешения
Требует разрешения VIEW SERVER STATE на сервере.
Замечания
Представление sys.dm_tran_active_snapshot_database_transactions содержит сведения о транзакциях, которым был назначен порядковый номер (XSN). Порядковый номер XSN назначается при первом доступе транзакции к хранилищу версий. В следующих примерах показано, как в базе данных, для которой включена изоляция моментальных снимков или READ COMMITTED с использованием управления версиями строк, транзакции назначается номер XSN.
Если транзакция выполняется на упорядочиваемом уровне изоляции, номер XSN назначается при первом выполнении транзакцией какой-либо инструкции, например операции UPDATE, в ходе которой создается версия строки.
Если транзакция выполняется на уровне изоляции моментальных снимков, номер XSN назначается при выполнении какой-либо инструкции языка обработки данных (DML), включая операцию SELECT.
Порядковые номера транзакций увеличиваются последовательно для каждой транзакции, создаваемой в экземпляре компонента Компонент Database Engine.
Примеры
Следующий пример использует тестовый сценарий, содержащий четыре параллельные транзакции, идентифицированные порядковыми номерами (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,
commit_sequence_num,
is_snapshot session_id,
first_snapshot_sequence_num,
max_version_chain_traversed,
average_version_chain_traversed,
elapsed_time_seconds
FROM sys.dm_tran_active_snapshot_database_transactions;
Ниже приводится результирующий набор.
transaction_id transaction_sequence_num commit_sequence_num
-------------- ------------------------ -------------------
9295 57 NULL
9324 58 NULL
9387 59 NULL
9400 60 NULL
is_snapshot session_id first_snapshot_sequence_num
----------- ----------- ---------------------------
0 54 0
0 53 0
1 52 57
1 51 57
max_version_chain_traversed average_version_chain_traversed
--------------------------- -------------------------------
0 0
0 0
1 1
1 1
elapsed_time_seconds
--------------------
419
397
359
333
Результаты из представления sys.dm_tran_active_snapshot_database_transactions вычисляются следующим образом.
XSN-57: Поскольку эта транзакция выполняется не на уровне изоляции моментальных снимков, значение is_snapshot и first_snapshot_sequence_num равны 0. Аргумент transaction_sequence_num показывает, что данной транзакции был присвоен порядковый номер, поскольку параметр READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION (или оба) имеют значение ON.
XSN-58: Эта транзакция выполняется не на уровне изоляции моментальных снимков, и к ней применяются те же правила, что и к транзакции XSN-57.
XSN-59: Это первая активная транзакция, которая выполняется на уровне изоляции моментальных снимков. Транзакция считывает данные, зафиксированные транзакцией XSN-57, на что указывает параметр first_snapshot_sequence_num. Вывод этой транзакции также указывает на то, что максимальная цепочка версий, пройденная для строки, равна 1 и что для каждой строки, к которой был получен доступ, пройдена в среднем 1 версия. Это означает, что транзакции XSN-57, XSN-58 и XSN-60 не изменяли строки и были зафиксированы.
XSN-60: Это вторая транзакция, выполняемая с изоляцией моментальных снимков. Вывод содержит такие же сведения, что и для транзакции XSN-59.
См. также
Справочник
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Динамические административные представления и функции (Transact-SQL)
Динамические административные представления и функции, связанные с транзакциями (Transact-SQL)